diff --git a/.github/workflows/delete-preview.yml b/.github/workflows/delete-preview.yml
new file mode 100644
index 0000000000..d2faf5dec6
--- /dev/null
+++ b/.github/workflows/delete-preview.yml
@@ -0,0 +1,32 @@
+name: Delete PR Preview
+
+on:
+ pull_request:
+ types: [closed]
+
+jobs:
+ delete-preview:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ pull-requests: write
+
+ steps:
+ - name: Make empty directory
+ run: mkdir -p public
+
+ - name: Delete preview folder
+ uses: peaceiris/actions-gh-pages@v3
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_dir: ./public
+ destination_dir: "PR${{ github.event.number }}"
+
+ - name: Comment on PR
+ uses: hasura/comment-progress@v2.2.0
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ repository: ${{ github.repository }}
+ number: ${{ github.event.number }}
+ id: deploy-preview
+ message: "🪓PR closed, deleted preview."
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 06333c40b4..8226f63ee7 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -4,6 +4,8 @@ on:
push:
branches:
- main
+ workflow_dispatch:
+ pull_request:
jobs:
deploy:
@@ -12,6 +14,7 @@ jobs:
contents: write
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
+ if: ${{ github.ref == 'refs/heads/main' }}
steps:
- uses: actions/checkout@v4
@@ -35,3 +38,55 @@ jobs:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./build
cname: revisit.dev
+
+ pr-deploy:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ pull-requests: write
+ concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+ if: ${{ github.event_name == 'pull_request' }}
+
+ steps:
+ - name: Comment on PR
+ uses: hasura/comment-progress@v2.2.0
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ repository: ${{ github.repository }}
+ number: ${{ github.event.number }}
+ id: deploy-preview
+ message: "Starting deployment of preview ⏳..."
+
+ - uses: actions/checkout@v4
+
+ - uses: actions/setup-node@v4
+ with:
+ node-version: lts/*
+ cache: 'yarn'
+
+ - name: Install dependencies
+ run: yarn install --immutable
+
+ - name: Build PR preview
+ run: yarn build
+ env:
+ BASE_URL: "/PR${{ github.event.number }}/"
+
+ - name: Push PR deploy preview
+ uses: peaceiris/actions-gh-pages@v3
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_dir: ./build
+ destination_dir: "PR${{ github.event.number }}"
+ keep_files: true
+
+ - name: Update comment
+ uses: hasura/comment-progress@v2.2.0
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ repository: ${{ github.repository }}
+ number: ${{ github.event.number }}
+ id: deploy-preview
+ message: "A preview of ${{ github.sha }} is uploaded and can be seen here:\n\n ✨ https://revisit.dev/PR${{ github.event.number }} ✨\n\nChanges may take a few minutes to propagate."
diff --git a/docs/getting-started/img/clone-repo.png b/docs/getting-started/img/clone-repo.png
new file mode 100644
index 0000000000..4739816b78
Binary files /dev/null and b/docs/getting-started/img/clone-repo.png differ
diff --git a/docs/getting-started/img/create-new-repo.png b/docs/getting-started/img/create-new-repo.png
new file mode 100644
index 0000000000..15f8c129c6
Binary files /dev/null and b/docs/getting-started/img/create-new-repo.png differ
diff --git a/docs/getting-started/installation.md b/docs/getting-started/installation.md
index 5d31848fc7..b17ddcb4d8 100644
--- a/docs/getting-started/installation.md
+++ b/docs/getting-started/installation.md
@@ -4,12 +4,54 @@ ReVISit project is open-source – meaning anyone can see the entire codebase. M
For most users, the best place to start is the template repository (first option below). If you want all demos and tighter upstream parity, or are considering contributing to reVISit, we recommend you fork the repository instead.
+## Installing Required Software
+
+Install these tools before cloning and running a study locally:
+
+- [Visual Studio Code](https://code.visualstudio.com/), or another editor with JSON support.
+- [Git](https://git-scm.com/downloads), so you can clone the template repository and share changes with collaborators.
+- The Active LTS version of [Node.js](https://nodejs.org/), which also installs NPM.
+
+:::info
+NPM is installed with Node.js. You usually do not need to install NPM separately: install Node.js first, then use NPM to install Yarn. If NPM is not installed for any reason, review the [NPM documentation](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) to get started.
+:::
+
+You can check whether Git, Node.js, and NPM are already installed with:
+
+```bash
+git --version
+node --version
+npm --version
+```
+
+Yarn can be installed using NPM. Run the following command to install Yarn:
+
+```bash
+npm i -g yarn
+```
+
+:::note
+If your machine restricts global installs, run the command with administrator permissions:
+
+```bash
+sudo npm i -g yarn
+```
+:::
+
+After installing Yarn, check that it was installed correctly:
+
+```bash
+yarn --version
+```
+
## Starting from the Template Repository (Recommended)
Navigate to the [template repository](https://github.com/revisit-studies/template), and click the "Use this template" button. This will create a new repository in your GitHub account with the same files as the template repository, based on the latest stable release of reVISit.

+
+
:::info
You can choose a name for the repository to suit your needs, but if you choose anything other than `study`, you also need to adjust the `VITE_BASE_PATH` in your [`.env`](https://github.com/revisit-studies/study/blob/main/.env) file to reflect that change.
:::
@@ -25,68 +67,93 @@ Most likely, you will **receive a warning from GitHub about a potential security
You can safely ignore this warning. The reason for this is that the Firebase API key is not a secret key, and it is intended to be shared publicly in client-side code. For more information, see the [Firebase documentation on API keys](https://firebase.google.com/docs/projects/api-keys#api_key_security_recommendations).
:::
-## Forking Repository (Advanced Alternative to Template Repository)
-
-Forking the repository is a more advanced option that allows you to have a copy of the entire `study` repository in your GitHub account. This means that you will have access to all the demo studies and that you can choose to follow the latest changes from the main repository (e.g., by following the `dev` branch). However, it also means that your repository will be linked to the upstream repository's fork network, which can make it more complex to manage.
+### Clone your template repository
-To fork, start by navigating to the following GitHub repository: https://github.com/revisit-studies/study
+After GitHub creates your repository from the template, open the repository page and click "Code". Copy the clone URL from the HTTPS and clone it to your computer:
-You should see a "fork" button on the same row as the name of the repository. When you fork a repository, you are essentially creating your own copy of the repository in your GitHub account. This means that any changes you commit and push to this new repository will not affect the main source code.
+```bash
+git clone https://github.com/your-github-name/your-repository-name.git
+cd your-repository-name
+```
-
+
-:::info
-GitHub only allows you to fork a repository once. If you have already forked the repository, you will need to clone the repository to your local machine, create a new repo on your account, and run `git remote set-url origin new.git.url/here` to allow you to have 2 versions of the repository in your account.
+:::note
+If you have not configured GitHub authentication locally, you can use "Download ZIP".
:::
-When forking the repository, you will be prompted for some basic information about this repository (such as the desired name). Once you've forked the repository into your own GitHub account, you can [clone the repository to your local computer](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository).
+## Run the Local Server
-:::info
-You can rename the repository to suit your needs, but if you change the name, you also need to adjust the `VITE_BASE_PATH` in your [`.env`](https://github.com/revisit-studies/study/blob/main/.env) file to reflect that change.
-:::
+After cloning your repository, make sure you are inside the repository folder:
-After the repository is on your local machine, you will have the entire codebase for your personal use. Any changes that you make to this repository can be committed and then pushed to your forked repository for other users in your organization to see.
+```bash
+cd your-repository-name
+```
-## Installing Required Software
+Then install the packages that reVISit needs to run:
-To continue, you will need the Active LTS [Node.js](https://nodejs.org/) version, and [Yarn](https://yarnpkg.com/) installed. If you already have Yarn installed, you can go to Step 2 below.
+```bash
+yarn install
+```
-:::info
-Yarn requires that you have the package manager NPM installed. If you do not have NPM installed, please review the [NPM documentation](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) to get started. These docs will also direct you on how to install Node – a prerequisite of NPM.
+Once this is finished, start the local server:
+
+```bash
+yarn serve
+```
+
+This will launch a local web server where you can view and interact with reVISit. By default, you can access it by visiting [http://localhost:8080/](http://localhost:8080/). Any change you make to the code will automatically update the website.
+
+:::warning
+If `yarn install` or `yarn serve` says it cannot find `package.json`, you are probably not inside the repository folder. Run `cd your-repository-name` first, then try the command again.
:::
-**Step 1: Install Yarn on your local computer using NPM:**
+When you visit the site, you'll see the studies registered in your local `public/global.json` file. You can interact with any of these studies to get some familiarity (and hopefully some inspiration) for how reVISit can help you quickly launch a crowd-sourced visualization study.
-```npm i -g yarn```
+:::note
+If you started from the template repository, this will be a smaller set of starter tutorial studies.
+:::
-**Step 2: Once Yarn is successfully installed, navigate to your local repository and run the following Yarn command:**
+:::warning
+We do not support using `npm` to run reVISit. Please use `yarn` for all package management and running commands.
+:::
-```yarn install```
+## Forking Repository (Advanced Alternative to Template Repository)
-This will install all the packages that the reVISit requires to run.
+Forking the repository is a more advanced option that allows you to have a copy of the entire `study` repository in your GitHub account. This means that you will have access to all the demo studies and that you can choose to follow the latest changes from the main repository (e.g., by following the `dev` branch). However, it also means that your repository will be linked to the upstream repository's fork network, which can make it more complex to manage.
-**Step 3: Once this is finished, you can now start the program:**
+To fork, start by navigating to the following GitHub repository: https://github.com/revisit-studies/study
-```yarn serve```
+You should see a "fork" button on the same row as the name of the repository. When you fork a repository, you are essentially creating your own copy of the repository in your GitHub account. This means that any changes you commit and push to this new repository will not affect the main source code.
-This will launch a local web server which can be accessed to view and interact with reVISit. By default, you can access this by visiting [http://localhost:8080/](http://localhost:8080/). Any change you make to the code will automatically update the website.
+
-When you visit the site, you'll see a list of demo studies, identical to [the demo page](https://revisit.dev/study/). You can interact with any of these studies to get some familiarity (and hopefully some inspiration) for how reVISit can help you quickly launch a crowd-sourced visualization study.
+:::info
+GitHub only allows you to fork a repository once. If you have already forked the repository, you will need to clone the repository to your local machine, create a new repo on your account, and run `git remote set-url origin new.git.url/here` to allow you to have 2 versions of the repository in your account.
+:::
-:::warning
-We do not support using `npm` to run reVISit. Please use `yarn` for all package management and running commands.
+When forking the repository, you will be prompted for some basic information about this repository (such as the desired name). Once you've forked the repository into your own GitHub account, you can [clone the repository to your local computer](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository).
+
+:::info
+You can rename the repository to suit your needs, but if you change the name, you also need to adjust the `VITE_BASE_PATH` in your [`.env`](https://github.com/revisit-studies/study/blob/main/.env) file to reflect that change.
:::
+After the repository is on your local machine, you will have the entire codebase for your personal use. Any changes that you make to this repository can be committed and then pushed to your forked repository for other users in your organization to see.
+
import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
\ No newline at end of file
+/>
diff --git a/docs/tutorial/config.json.md b/docs/tutorial/config.json.md
new file mode 100644
index 0000000000..3f9d6216c7
--- /dev/null
+++ b/docs/tutorial/config.json.md
@@ -0,0 +1,945 @@
+# config.json
+
+In this part of the tutorial, you will build the [Study Config](../typedoc/interfaces/StudyConfig.md), [`public/tutorial/config.json`](https://github.com/revisit-studies/template/blob/main/public/tutorial/config.json). The completed version is [`public/tutorial/_answers/config.json`](https://github.com/revisit-studies/template/blob/main/public/tutorial/_answers/config.json). Use the completed version to check the step you just finished, not as something to copy all at once.
+
+:::info
+Before you start editing tutorial files, complete the [Installation guide](../getting-started/installation.md) using the **Starting from the Template Repository** workflow.
+:::
+
+## Step 1: Run the local server
+
+Start the local server from the root of your template repository:
+
+```bash
+yarn serve
+```
+
+Before editing the tutorial Study Config, open [`public/global.json`](https://github.com/revisit-studies/template/blob/main/public/global.json). This file follows the [Global Config](../typedoc/interfaces/GlobalConfig.md) schema. The template should be empty for now.
+
+Let's add a tutorial study here.
+
+```json title="public/global.json"
+{
+ "$schema": "https://raw.githubusercontent.com/revisit-studies/study/v2.4.3/src/parser/GlobalConfigSchema.json",
+ "configsList": ["tutorial"],
+ "configs": {
+ "tutorial": {
+ "path": "tutorial/config.json"
+ }
+ }
+}
+```
+
+Open [http://localhost:8080](http://localhost:8080). You should see the tutorial study listed.
+
+
+
+:::warning
+At this point, the tutorial config should show a warning that the sequence is empty. You can ignore this warning for now. It is intentional because `public/tutorial/config.json` currently has an empty [`sequence.components`](../typedoc/interfaces/Sequence.md#components) array. If you enter the study now, reVISit may go directly to the study end page because no components have been added to the sequence yet.
+:::
+
+## Step 2: Add the welcome component
+
+If you go into the tutorial study right now, you will be directed straight to the end page, which should look like this.
+
+
+
+Next, open `public/tutorial/config.json`. Inside the empty `components` object, add a basic [Markdown component](../typedoc/interfaces/MarkdownComponent.md) named `welcome`.
+
+```json title="public/tutorial/config.json"
+"components": {
+ "welcome": {
+ "type": "markdown",
+ "path": "tutorial/assets/welcome.md",
+ "response": []
+ }
+}
+```
+
+This component displays the Markdown file at [`public/tutorial/assets/welcome.md`](https://github.com/revisit-studies/template/blob/main/public/tutorial/assets/welcome.md).
+
+Now add `welcome` to the sequence:
+
+```json title="public/tutorial/config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ "welcome"
+ ]
+}
+```
+
+Refresh the local study or click "Next participant" to reload the Study Config and start a fresh preview. You should now see the welcome page.
+
+
+
+
+:::warning
+A common mistake is to add the component but forget the sequence entry. If the component exists in `components` but is not listed in `sequence.components`, the component will not show up.
+:::
+
+## Step 3: Add the consent component
+
+Add a comma after the `welcome` component, then add a second Markdown component named `consent`.
+
+```json title="public/tutorial/config.json"
+"components": {
+ "welcome": { ... },
+ "consent": {
+ "type": "markdown",
+ "path": "tutorial/assets/consent.md",
+ "nextButtonText": "I agree",
+ "response": []
+ }
+}
+```
+
+This component displays [`public/tutorial/assets/consent.md`](https://github.com/revisit-studies/template/blob/main/public/tutorial/assets/consent.md). The `nextButtonText` field changes the text on the next button, which is useful for consent pages.
+
+Add `consent` after `welcome` in the sequence:
+
+```json title="public/tutorial/config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ "welcome",
+ "consent"
+ ]
+}
+```
+
+Refresh the study or click "Next participant". You should see the welcome page first, then the consent page with an "I agree" button.
+
+
+
+## Step 4: Add demographics with several form elements
+
+Add a questionnaire component named `demographics`. A [`questionnaire`](../typedoc/interfaces/QuestionnaireComponent.md) component is used to collect form-based answers from the participant, such as demographic information, survey responses, or post-task feedback.
+
+ReVISit supports many [form response types](../designing-studies/forms.md) inside a questionnaire, including numerical inputs, Likert scales, dropdowns, checkboxes, sliders, dividers, and matrix questions. For the full list of available response types, see the [Response reference](../typedoc/type-aliases/Response.md).
+
+```json title="public/tutorial/config.json"
+"components": {
+ "welcome": { ... },
+ "consent": { ... },
+ "demographics": {
+ "type": "questionnaire",
+ "response": [
+ {
+ "id": "age",
+ "type": "numerical",
+ "prompt": "What is your age?"
+ },
+ {
+ "id": "health",
+ "type": "likert",
+ "prompt": "How would you rate your overall health?",
+ "secondaryText": "1 being the worst health and 5 being the best health",
+ "numItems": 5,
+ "rightLabel": "Best health",
+ "leftLabel": "Worst health"
+ },
+ {
+ "id": "dividerResponse",
+ "type": "divider",
+ "location": "belowStimulus"
+ },
+ {
+ "id": "fruits",
+ "type": "matrix-checkbox",
+ "prompt": "Which of these fruits do you like at each time of day?",
+ "answerOptions": ["Breakfast", "Lunch", "Dinner"],
+ "questionOptions": ["Banana", "Apple", "Orange", "Grapes", "Strawberry"]
+ },
+ {
+ "id": "q-short-text",
+ "type": "shortText",
+ "prompt": "What is your favorite sports team?",
+ "placeholder": "Enter your team here"
+ },
+ {
+ "id": "operating-systems",
+ "type": "checkbox",
+ "prompt": "Which of these operating systems do you use?",
+ "minSelections": 1,
+ "maxSelections": 2,
+ "options": ["Windows", "macOS", "Linux"],
+ "withOther": true
+ },
+ {
+ "id": "q-slider",
+ "type": "slider",
+ "prompt": "How would you rate this tutorial so far?",
+ "secondaryText": "Your answer is not legally binding.",
+ "startingValue": 50,
+ "options": [
+ { "label": "Bad", "value": 0 },
+ { "label": "Alright", "value": 50 },
+ { "label": "Good", "value": 100 }
+ ]
+ }
+ ]
+ }
+}
+```
+
+This one component introduces several form elements: [numerical input](../typedoc/interfaces/NumericalResponse.md), [Likert scale](../typedoc/interfaces/LikertResponse.md), [divider](../typedoc/interfaces/DividerResponse.md), [matrix checkbox](../typedoc/interfaces/MatrixCheckboxResponse.md), [short text](../typedoc/interfaces/ShortTextResponse.md), [checkbox](../typedoc/interfaces/CheckboxResponse.md), and [slider](../typedoc/interfaces/SliderResponse.md).
+
+
+Add `demographics` to the sequence:
+
+```json title="public/tutorial/config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ "welcome",
+ "consent",
+ "demographics"
+ ]
+}
+```
+
+Click "Next participant" and confirm that the demographics page appears after consent.
+
+
+
+## Step 5: Add training with feedback
+
+Add a questionnaire component named `trainingWithFeedback`.
+
+```json title="public/tutorial/config.json"
+"components": {
+ "welcome": { ... },
+ "consent": { ... },
+ "demographics": { ... },
+ "trainingWithFeedback": {
+ "type": "questionnaire",
+ "response": [
+ {
+ "id": "training",
+ "type": "radio",
+ "prompt": "Yes is the correct answer, click it",
+ "options": ["Yes", "No"]
+ }
+ ],
+ "correctAnswer": [
+ {
+ "id": "training",
+ "answer": "Yes"
+ }
+ ],
+ "provideFeedback": true,
+ "trainingAttempts": 2,
+ "allowFailedTraining": false,
+ "nextButtonDisableTime": 5000
+ }
+}
+```
+
+- [`correctAnswer`](../typedoc/interfaces/Answer.md) says which answer is correct. The `id` must match the response id, `training`.
+- `provideFeedback: true` tells to show feedback after the participant answers.
+- `trainingAttempts: 2` gives the participant two attempts.
+- `allowFailedTraining: false` prevents the participant from continuing after failing the allowed attempts.
+- `nextButtonDisableTime: 5000` disables the next button after 5 seconds.
+
+Add `trainingWithFeedback` to the sequence after `demographics`.
+
+```json title="public/tutorial/config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ "welcome",
+ "consent",
+ "demographics",
+ "trainingWithFeedback"
+ ]
+}
+```
+
+When you preview this page, the next button becomes a **Check answer** button. If the participant answers incorrectly twice, reVISit stops them from continuing. If they answer correctly, they can move forward.
+
+
+
+## Step 6: Add the coin image component
+
+Add an [image component](../typedoc/interfaces/ImageComponent.md) named `coinImage`.
+
+```json title="public/tutorial/config.json"
+"components": {
+ "welcome": { ... },
+ "consent": { ... },
+ ...,
+ "trainingWithFeedback": { ... },
+ "coinImage": {
+ "type": "image",
+ "path": "tutorial/assets/coins.png",
+ "nextButtonLocation": "sidebar",
+ "response": [
+ {
+ "id": "cost-effective",
+ "type": "radio",
+ "prompt": "Which coin is most effective to produce?",
+ "location": "sidebar",
+ "options": ["Penny", "Nickel", "Dime", "Quarter", "Half Dollar"]
+ },
+ {
+ "id": "cost-ineffective",
+ "type": "dropdown",
+ "prompt": "Which coin is least cost effective to produce?",
+ "location": "sidebar",
+ "options": ["Penny", "Nickel", "Dime", "Quarter", "Half Dollar"]
+ }
+ ]
+ }
+}
+```
+
+This component displays [`public/tutorial/assets/coins.png`](https://github.com/revisit-studies/template/blob/main/public/tutorial/assets/coins.png) and places the questions in the sidebar.
+Add `coinImage` to the sequence after `trainingWithFeedback`.
+
+```json title="public/tutorial/config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ "welcome",
+ "consent",
+ "demographics",
+ "trainingWithFeedback",
+ "coinImage"
+ ]
+}
+```
+
+
+
+## Step 7: Add Vega components
+
+Add [`vegaPath`](../typedoc/interfaces/VegaComponentPath.md), which loads a Vega chart from a separate file.
+
+```json title="public/tutorial/config.json"
+"components": {
+ "welcome": { ... },
+ "consent": { ... },
+ ...,
+ "coinImage": { ... },
+ "vegaPath": {
+ "type": "vega",
+ "path": "tutorial/assets/simpleChart.json",
+ "response": [
+ {
+ "id": "simple-vega",
+ "type": "radio",
+ "prompt": "What is the value of bar A?",
+ "options": ["10", "28", "50"]
+ }
+ ]
+ }
+}
+```
+
+Then add [`vegaConfig`](../typedoc/interfaces/VegaComponentConfig.md), which puts the Vega-Lite chart definition directly in the Study Config.
+
+```json title="public/tutorial/config.json"
+"components": {
+ "welcome": { ... },
+ "consent": { ... },
+ ...,
+ "vegaPath": { ... },
+ "vegaConfig": {
+ "type": "vega",
+ "config": {
+ "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
+ "description": "A simple bar chart with embedded data.",
+ "data": {
+ "values": [
+ { "category": "A", "value": 28 },
+ { "category": "B", "value": 55 },
+ { "category": "C", "value": 43 }
+ ]
+ },
+ "mark": "bar",
+ "encoding": {
+ "x": {
+ "field": "category",
+ "type": "nominal",
+ "axis": { "labelAngle": 0 }
+ },
+ "y": {
+ "field": "value",
+ "type": "quantitative"
+ }
+ }
+ },
+ "response": [
+ {
+ "id": "dynamic-vega",
+ "type": "radio",
+ "prompt": "What is the value of bar A?",
+ "options": ["10", "28", "50"]
+ }
+ ]
+ }
+}
+```
+
+:::note
+There are two ways of defining Vega components in reVISit. If you'd like to learn more, visit [Vega stimulus docs](../designing-studies/vega-stimulus.md). Use `path` when the visualization specification is easier to maintain as its own file. Use `config` when the chart is small enough to keep inside the Study Config.
+:::
+Add `vegaPath` and `vegaConfig` to the sequence.
+
+```json title="public/tutorial/config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ "welcome",
+ "consent",
+ "demographics",
+ "trainingWithFeedback",
+ "coinImage",
+ "vegaPath",
+ "vegaConfig"
+ ]
+}
+```
+
+
+
+## Step 8: Add reactive Vega
+
+Add `reactiveVega`.
+
+```json title="public/tutorial/config.json"
+"components": {
+ "welcome": { ... },
+ "consent": { ... },
+ ...,
+ "vegaConfig": { ... },
+ "reactiveVega": {
+ "type": "vega",
+ "path": "tutorial/assets/reactive.json",
+ "response": [
+ {
+ "id": "reactiveResponse",
+ "type": "reactive",
+ "prompt": "What is the value of bar A? Click it to show here"
+ }
+ ]
+ }
+}
+```
+
+A [reactive response](../typedoc/interfaces/ReactiveResponse.md) records an interaction from the visualization itself. In this example, the participant clicks a mark in the Vega chart and that interaction becomes the response.
+
+Add `reactiveVega` to the sequence.
+
+```json title="public/tutorial/config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ ...,
+ "vegaConfig",
+ "reactiveVega"
+ ]
+}
+```
+
+
+
+## Step 9: Add website components
+
+First, add a simple [website component](../typedoc/interfaces/WebsiteComponent.md). This embeds a web page in the study as an iframe.
+
+```json title="public/tutorial/config.json"
+"components": {
+ "welcome": { ... },
+ "consent": { ... },
+ ...,
+ "reactiveVega": { ... },
+ "website": {
+ "type": "website",
+ "path": "https://revisit.dev",
+ "response": []
+ }
+}
+```
+
+This is useful when a study asks participants to inspect a website or web-based visualization. The empty `response` array means the page is shown without collecting a form response.
+
+Add `website` to the sequence.
+
+
+```json title="public/tutorial/config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ ...,
+ "reactiveVega",
+ "website"
+ ]
+}
+```
+
+
+
+Next, add a reactive website named `reactiveWebsite`.
+
+```json title="public/tutorial/config.json"
+"components": {
+ "welcome": { ... },
+ "consent": { ... },
+ ...,
+ "website": { ... },
+ "reactiveWebsite": {
+ "type": "website",
+ "path": "tutorial/assets/bar-chart-interaction.html",
+ "instructionLocation": "aboveStimulus",
+ "description": "A trial for the user to click the largest bar",
+ "instruction": "Click on the largest bar",
+ "response": [
+ {
+ "id": "barChart",
+ "prompt": "Your selected answer:",
+ "location": "sidebar",
+ "type": "reactive"
+ }
+ ],
+ "parameters": {
+ "barData": [0.32, 0.01, 1.2, 1.3, 0.82, 0.4, 0.3]
+ }
+ }
+}
+```
+
+This component loads a local HTML page and passes `barData` into it through [`parameters`](../typedoc/interfaces/WebsiteComponent.md#parameters). The page can render a different chart based on those values. The response is `reactive`, so the HTML page can send the participant's selection back to reVISit.
+
+Add `reactiveWebsite` to the sequence after `website`.
+
+
+```json title="public/tutorial/config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ ...,
+ "website",
+ "reactiveWebsite"
+ ]
+}
+```
+
+
+
+## Step 10: Add reactExampleCars
+
+Add the first [React component](../typedoc/interfaces/ReactComponent.md) trial.
+
+```json title="public/tutorial/config.json"
+"components": {
+ "welcome": { ... },
+ "consent": { ... },
+ ...,
+ "reactiveWebsite": { ... },
+ "reactExampleCars": {
+ "type": "react-component",
+ "path": "tutorial/assets/ReactExample.tsx",
+ "instruction": "How many cars from Japan have a Miles Per Gallon value greater than 35?",
+ "response": [
+ {
+ "id": "response",
+ "prompt": "Answer:",
+ "location": "sidebar",
+ "type": "numerical",
+ "max": 100,
+ "min": 0
+ }
+ ],
+ "correctAnswer": [
+ {
+ "id": "response",
+ "answer": 17
+ }
+ ],
+ "parameters": {
+ "dataset": "cars",
+ "x": "Miles per Gallon",
+ "y": "Weight (lbs)",
+ "category": "Origin",
+ "ids": "id",
+ "brushType": "Rectangular Selection"
+ }
+ }
+}
+```
+
+This component renders [`ReactExample.tsx`](https://github.com/revisit-studies/template/blob/main/src/public/tutorial/assets/ReactExample.tsx). The [`parameters`](../typedoc/interfaces/ReactComponent.md#parameters) object tells the React component which dataset and fields to use.
+
+
+:::info
+[React component](../designing-studies/react-stimulus.md) paths are relative to `src/public/`, not the root `public/` folder. The path `tutorial/assets/ReactExample.tsx` points to `src/public/tutorial/assets/ReactExample.tsx`.
+:::
+
+Add `reactExampleCars` to the sequence.
+
+```json title="public/tutorial/config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ ...,
+ "reactiveWebsite",
+ "reactExampleCars"
+ ]
+}
+```
+
+
+
+## Step 11: Add reactExamplePenguins
+
+Add a second React component trial that uses the same React file with different parameters.
+
+```json title="public/tutorial/config.json"
+"components": {
+ "welcome": { ... },
+ "consent": { ... },
+ ...,
+ "reactExampleCars": { ... },
+ "reactExamplePenguins": {
+ "type": "react-component",
+ "path": "tutorial/assets/ReactExample.tsx",
+ "instruction": "How many Gentoo penguins weigh less than 4.5k grams (g)?",
+ "response": [
+ {
+ "id": "response",
+ "prompt": "Answer:",
+ "location": "sidebar",
+ "type": "numerical",
+ "max": 100,
+ "min": 0
+ }
+ ],
+ "correctAnswer": [
+ {
+ "id": "response",
+ "answer": 15
+ }
+ ],
+ "parameters": {
+ "dataset": "penguin",
+ "x": "Body Mass (g)",
+ "y": "Flipper Length (mm)",
+ "category": "Species",
+ "ids": "id",
+ "brushType": "Slider Selection"
+ }
+ }
+}
+```
+
+This step shows why parameters are useful. The Study Config can reuse the same React component while changing the task, dataset, fields, and interaction style.
+
+Add `reactExamplePenguins` to the sequence.
+
+```json title="public/tutorial/config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ ...,
+ "reactExampleCars",
+ "reactExamplePenguins"
+ ]
+}
+```
+
+
+
+## Step 12: Add questionnaire examples: example1 and example2
+
+Add two simple questionnaire components.
+
+```json title="public/tutorial/config.json"
+"components": {
+ "welcome": { ... },
+ "consent": { ... },
+ ...,
+ "reactExamplePenguins": { ... },
+ "example1": {
+ "type": "questionnaire",
+ "response": [
+ {
+ "id": "q-example-1",
+ "type": "shortText",
+ "prompt": "Example question"
+ }
+ ]
+ },
+ "example2": {
+ "type": "questionnaire",
+ "response": [
+ {
+ "id": "q-example-2",
+ "type": "dropdown",
+ "prompt": "Example question",
+ "options": ["Option 1", "Option 2"]
+ }
+ ]
+ }
+}
+```
+
+These components are intentionally simple. You will reuse them in the interruption examples in the next step.
+
+## Step 13: Add attention checks and interruptions
+
+[Attention checks and interruptions](../designing-studies/sequences/study-sequences.md#attention-checks-and-breaks) help you add quality-control moments without rewriting the main study flow. An attention check can catch participants who are not reading carefully, while an interruption can insert a check, break, or reminder between normal tasks.
+
+A [sequence block](../typedoc/interfaces/ComponentBlock.md) can be `fixed`, `random`, or `latinSquare`. A fixed block shows components in the order you list them. A random block shuffles the components for each participant. A Latin square block balances ordering across participants. See the [study sequence guide](../designing-studies/sequences/study-sequences.md) for more sequence patterns.
+
+:::info
+You can also nest sequence blocks. For example, the following sequence keeps `welcome` and `consent` fixed, then randomizes later tasks:
+
+```json title="public/tutorial/config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ "welcome",
+ "consent",
+ {
+ "id": "randomizedTasks",
+ "order": "random",
+ "components": [
+ "coinImage",
+ "vegaPath",
+ "reactiveVega"
+ ]
+ }
+ ]
+}
+```
+:::
+
+First, add an `attentionCheck` component.
+
+```json title="public/tutorial/config.json"
+"components": {
+ "welcome": { ... },
+ "consent": { ... },
+ ...,
+ "example2": { ... },
+ "attentionCheck": {
+ "type": "questionnaire",
+ "response": [
+ {
+ "id": "q-example-2",
+ "type": "dropdown",
+ "prompt": "Attention check question",
+ "options": ["Option 1", "Option 2"]
+ }
+ ]
+ }
+}
+```
+
+Then add a [deterministic interruption](../typedoc/interfaces/DeterministicInterruption.md) block to the sequence:
+
+```json title="public/tutorial/config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ "welcome",
+ "consent",
+ ...,
+ {
+ "id": "attentionDeterministic",
+ "order": "fixed",
+ "components": [
+ "example1",
+ "example2",
+ "example1",
+ "example2"
+ ],
+ "interruptions": [
+ {
+ "firstLocation": 0,
+ "spacing": 2,
+ "components": [
+ "attentionCheck"
+ ]
+ }
+ ]
+ }
+ ]
+}
+```
+
+This is deterministic because the attention check appears at a predictable spacing.
+
+Now add a [random interruption](../typedoc/interfaces/RandomInterruption.md) block:
+
+```json title="public/tutorial/config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ "welcome",
+ "consent",
+ ...,
+ {
+ "id": "attentionRandom",
+ "order": "fixed",
+ "components": [
+ "example1",
+ "example2",
+ "example1",
+ "example2"
+ ],
+ "interruptions": [
+ {
+ "spacing": "random",
+ "numInterruptions": 3,
+ "components": [
+ "attentionCheck"
+ ]
+ }
+ ]
+ }
+ ]
+}
+```
+
+## Step 14: Add skip logic
+
+[Skip logic](../designing-studies/sequences/study-sequences.md#skip-logic) lets a study respond to a participant's answer. You can use it to branch around questions that do not apply, end a block when someone fails an attention check, or send participants to a follow-up task. The exact skip condition shapes are listed in [`SkipConditions`](../typedoc/type-aliases/SkipConditions.md).
+
+First, add `exampleWithAnswer`.
+
+```json title="public/tutorial/config.json"
+"components": {
+ "welcome": { ... },
+ "consent": { ... },
+ ...,
+ "attentionCheck": { ... },
+ "exampleWithAnswer": {
+ "type": "questionnaire",
+ "response": [
+ {
+ "id": "q-example-1",
+ "type": "numerical",
+ "prompt": "What is 2 + 2?"
+ }
+ ]
+ }
+}
+```
+
+Then add a [`skip`](../typedoc/type-aliases/SkipConditions.md) block to the sequence:
+
+```json title="public/tutorial/config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ "welcome",
+ "consent",
+ ...,
+ {
+ "id": "skipResponse",
+ "order": "fixed",
+ "components": [
+ "exampleWithAnswer",
+ "example1"
+ ],
+ "skip": [
+ {
+ "name": "exampleWithAnswer",
+ "check": "response",
+ "responseId": "q-example-1",
+ "value": 4,
+ "comparison": "notEqual",
+ "to": "end"
+ }
+ ]
+ }
+ ]
+}
+```
+
+This block asks the participant `What is 2 + 2?`. If the response is not equal to `4`, reVISit skips to the end of this nested block. If the response is `4`, the participant continues to `example1`.
+
+The `responseId` must match the response id inside `exampleWithAnswer`.
+
+## Step 15: Add the microphone library and audio settings
+
+Finally, add the [microphone check library](../designing-studies/plugin-libraries.md) and turn on [audio recording](../designing-studies/think-aloud.md) for the study.
+
+Add [`importedLibraries`](../typedoc/interfaces/StudyConfig.md#importedlibraries) after `studyMetadata`:
+
+```json title="public/tutorial/config.json"
+"importedLibraries": [
+ "mic-check"
+],
+```
+
+Then add [`recordAudio`](../typedoc/interfaces/UIConfig.md#recordaudio) to [`uiConfig`](../typedoc/interfaces/UIConfig.md):
+
+```json title="public/tutorial/config.json"
+"uiConfig": {
+ "recordAudio": true,
+ "contactEmail": "contact@revisit.dev",
+ "helpTextPath": "tutorial/assets/help.md",
+ "logoPath": "revisitAssets/revisitLogoSquare.svg",
+ "withProgressBar": true,
+ "autoDownloadStudy": false,
+ "withSidebar": true
+}
+```
+
+Add the microphone check component to the sequence after `consent`:
+
+```json title="public/tutorial/config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ "welcome",
+ "consent",
+ "$mic-check.components.audioTest",
+ "demographics",
+ ...
+ ]
+}
+```
+
+:::note
+The `${library}.components.X` syntax references a component defined in an imported library. The `$` prefix tells reVISit to look up the component in the library namespace rather than in your local `components` object. The same syntax works for sequences (`${library}.sequences.X`).
+:::
+
+Because `uiConfig.recordAudio` enables audio recording for the study, turn audio recording off for the welcome and consent pages:
+
+```json title="public/tutorial/config.json"
+"components": {
+ "welcome": {
+ "type": "markdown",
+ "recordAudio": false,
+ "path": "tutorial/assets/welcome.md",
+ "response": []
+ },
+ "consent": {
+ "type": "markdown",
+ "recordAudio": false,
+ "path": "tutorial/assets/consent.md",
+ "nextButtonText": "I agree",
+ "response": []
+ },
+ ...
+}
+```
+
+
+
+import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
+
+
diff --git a/docs/tutorial/img/config.json/step1.png b/docs/tutorial/img/config.json/step1.png
new file mode 100644
index 0000000000..fb43b8d7f9
Binary files /dev/null and b/docs/tutorial/img/config.json/step1.png differ
diff --git a/docs/tutorial/img/config.json/step10.png b/docs/tutorial/img/config.json/step10.png
new file mode 100644
index 0000000000..747bbec055
Binary files /dev/null and b/docs/tutorial/img/config.json/step10.png differ
diff --git a/docs/tutorial/img/config.json/step11.png b/docs/tutorial/img/config.json/step11.png
new file mode 100644
index 0000000000..da9bd37893
Binary files /dev/null and b/docs/tutorial/img/config.json/step11.png differ
diff --git a/docs/tutorial/img/config.json/step2-1.png b/docs/tutorial/img/config.json/step2-1.png
new file mode 100644
index 0000000000..1e62fea276
Binary files /dev/null and b/docs/tutorial/img/config.json/step2-1.png differ
diff --git a/docs/tutorial/img/config.json/step2-2.png b/docs/tutorial/img/config.json/step2-2.png
new file mode 100644
index 0000000000..87dda23743
Binary files /dev/null and b/docs/tutorial/img/config.json/step2-2.png differ
diff --git a/docs/tutorial/img/config.json/step3.png b/docs/tutorial/img/config.json/step3.png
new file mode 100644
index 0000000000..7d08098d91
Binary files /dev/null and b/docs/tutorial/img/config.json/step3.png differ
diff --git a/docs/tutorial/img/config.json/step4.png b/docs/tutorial/img/config.json/step4.png
new file mode 100644
index 0000000000..6940e4c31a
Binary files /dev/null and b/docs/tutorial/img/config.json/step4.png differ
diff --git a/docs/tutorial/img/config.json/step5.png b/docs/tutorial/img/config.json/step5.png
new file mode 100644
index 0000000000..852596f10a
Binary files /dev/null and b/docs/tutorial/img/config.json/step5.png differ
diff --git a/docs/tutorial/img/config.json/step6.png b/docs/tutorial/img/config.json/step6.png
new file mode 100644
index 0000000000..4d16984ec5
Binary files /dev/null and b/docs/tutorial/img/config.json/step6.png differ
diff --git a/docs/tutorial/img/config.json/step7.png b/docs/tutorial/img/config.json/step7.png
new file mode 100644
index 0000000000..f6d6295406
Binary files /dev/null and b/docs/tutorial/img/config.json/step7.png differ
diff --git a/docs/tutorial/img/config.json/step8.png b/docs/tutorial/img/config.json/step8.png
new file mode 100644
index 0000000000..0f0437bf01
Binary files /dev/null and b/docs/tutorial/img/config.json/step8.png differ
diff --git a/docs/tutorial/img/config.json/step9-2.png b/docs/tutorial/img/config.json/step9-2.png
new file mode 100644
index 0000000000..dd9f2bb651
Binary files /dev/null and b/docs/tutorial/img/config.json/step9-2.png differ
diff --git a/docs/tutorial/img/config.json/step9.png b/docs/tutorial/img/config.json/step9.png
new file mode 100644
index 0000000000..ccc4582695
Binary files /dev/null and b/docs/tutorial/img/config.json/step9.png differ
diff --git a/docs/tutorial/img/replication-config.json/step1.png b/docs/tutorial/img/replication-config.json/step1.png
new file mode 100644
index 0000000000..13c5b87b2b
Binary files /dev/null and b/docs/tutorial/img/replication-config.json/step1.png differ
diff --git a/docs/tutorial/img/replication-config.json/step3.png b/docs/tutorial/img/replication-config.json/step3.png
new file mode 100644
index 0000000000..113a278da2
Binary files /dev/null and b/docs/tutorial/img/replication-config.json/step3.png differ
diff --git a/docs/tutorial/img/replication-config.json/step4.png b/docs/tutorial/img/replication-config.json/step4.png
new file mode 100644
index 0000000000..989d3307c1
Binary files /dev/null and b/docs/tutorial/img/replication-config.json/step4.png differ
diff --git a/docs/tutorial/img/replication-config.json/step5.png b/docs/tutorial/img/replication-config.json/step5.png
new file mode 100644
index 0000000000..3f2aa38b2c
Binary files /dev/null and b/docs/tutorial/img/replication-config.json/step5.png differ
diff --git a/docs/tutorial/img/replication-config.json/step6.png b/docs/tutorial/img/replication-config.json/step6.png
new file mode 100644
index 0000000000..a0fe912d00
Binary files /dev/null and b/docs/tutorial/img/replication-config.json/step6.png differ
diff --git a/docs/tutorial/replication-config.json.md b/docs/tutorial/replication-config.json.md
new file mode 100644
index 0000000000..630f02695b
--- /dev/null
+++ b/docs/tutorial/replication-config.json.md
@@ -0,0 +1,355 @@
+# replication-config.json
+
+In this part of the tutorial, you will build a [Study Config](../typedoc/interfaces/StudyConfig.md) for a replication study, [`public/tutorial/replication-config.json`](https://github.com/revisit-studies/template/blob/main/public/tutorial/replication-config.json). The completed version is [`public/tutorial/_answers/replication-config.json`](https://github.com/revisit-studies/template/blob/main/public/tutorial/_answers/replication-config.json). Use the completed version to check the step you just finished, not as something to copy all at once.
+
+:::info
+Before you start editing tutorial files, complete the [Installation guide](../getting-started/installation.md) using the **Starting from the Template Repository** workflow.
+:::
+
+## Step 1: Run the local server and register the config
+
+Start the local server from the root of your template repository:
+
+```bash
+yarn serve
+```
+
+Before editing the replication Study Config, open [`public/global.json`](https://github.com/revisit-studies/template/blob/main/public/global.json). Add `replication` to `configsList` and `configs`.
+
+```json title="public/global.json"
+{
+ "$schema": "https://raw.githubusercontent.com/revisit-studies/study/v2.4.3/src/parser/GlobalConfigSchema.json",
+ "configsList": ["tutorial", "replication"],
+ "configs": {
+ "tutorial": {
+ "path": "tutorial/config.json"
+ },
+ "replication": {
+ "path": "tutorial/replication-config.json"
+ }
+ }
+}
+```
+
+Open [http://localhost:8080](http://localhost:8080). You should now see the replication study listed.
+
+
+
+## Step 2: Add the reusable scatter plot base component
+
+First, create the React wrapper that the Study Config will load. In `src/public/tutorial/assets/replication/`, add a file named `ScatterWrapper.tsx`.
+
+```tsx title="src/public/tutorial/assets/replication/ScatterWrapper.tsx"
+/**
+ * Authors: The ReVISit team
+ * Description:
+ * This file is the wrapper component for the Scatter plots
+ */
+
+import {
+ Center, Group, Stack, Text,
+} from '@mantine/core';
+import { Scatter } from './Scatter';
+import { StimulusParams } from '../../../../../store/types';
+
+/**
+ * Holds 2 Scatter Plots
+ * @param param0 - r1 is the correlation value for 1, r2 is the correlation value for 2,
+ * onClick is a function that determines the functionality when a graph is clicked.
+ * @returns 2 Scatter Plots
+ */
+export default function ScatterWrapper({ parameters }: StimulusParams<{ r1: number; r2: number }>) {
+ const { r1, r2 } = parameters;
+ const r1DatasetName = `dataset_${r1.toFixed(2)}_size_100.csv`;
+ const r2DatasetName = `dataset_${r2.toFixed(2)}_size_100.csv`;
+
+ return (
+
+
+ Please select the visualization that appears to have a larger correlation.
+
+
+
+
+
+
+
+
+ );
+}
+```
+
+This wrapper reads `r1` and `r2` from the component [`parameters`](../typedoc/interfaces/ReactComponent.md#parameters), turns them into dataset file names, and renders two scatter plots side by side.
+
+Replace the empty [`baseComponents`](../typedoc/interfaces/StudyConfig.md#basecomponents) object with `scatterBase`.
+
+```json title="public/tutorial/replication-config.json"
+"baseComponents": {
+ "scatterBase": {
+ "type": "react-component",
+ "path": "tutorial/assets/replication/ScatterWrapper.tsx",
+ "response": [
+ {
+ "id": "buttonsResponse",
+ "type": "buttons",
+ "prompt": "Choose the plot with the higher correlation:",
+ "required": true,
+ "location": "belowStimulus",
+ "options": [
+ {
+ "label": "Left Plot",
+ "value": "left"
+ },
+ {
+ "label": "Right Plot",
+ "value": "right"
+ }
+ ]
+ }
+ ]
+ }
+}
+```
+
+`baseComponents` are templates. They are not added to the sequence directly. Other components inherit from them via `"baseComponent": "scatterBase"` and override only the fields that change, usually [`parameters`](../typedoc/interfaces/ReactComponent.md#parameters).
+
+## Step 3: Add the first practice trial
+
+Replace the empty [`components`](../typedoc/interfaces/StudyConfig.md#components) object with the first practice trial.
+
+```json title="public/tutorial/replication-config.json"
+"components": {
+ "practice T1 A:0.3 B:0.7": {
+ "baseComponent": "scatterBase",
+ "parameters": {
+ "r1": 0.3,
+ "r2": 0.7
+ },
+ "correctAnswer": [
+ {
+ "id": "buttonsResponse",
+ "answer": "right"
+ }
+ ],
+ "provideFeedback": true
+ }
+}
+```
+
+This trial [inherits](../typedoc/type-aliases/InheritedComponent.md) the stimulus and response from `scatterBase`. The [`parameters`](../typedoc/interfaces/ReactComponent.md#parameters) values tell the React component which correlations to show in the left and right plots.
+
+For this practice trial, `r2` is larger than `r1`, so the correct answer is `"right"`. The `id` in [`correctAnswer`](../typedoc/interfaces/Answer.md) must match the response id from the base component: `buttonsResponse`.
+
+Add the first practice trial to the sequence:
+
+```json title="public/tutorial/replication-config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ {
+ "order": "fixed",
+ "components": [
+ "practice T1 A:0.3 B:0.7"
+ ]
+ }
+ ]
+}
+```
+
+
+
+## Step 4: Add the second practice trial
+
+Add a comma after the first practice trial, then add the second practice trial.
+
+```json title="public/tutorial/replication-config.json"
+"components": {
+ "practice T1 A:0.3 B:0.7": { ... },
+ "practice T2 A:0.9 B:0.6": {
+ "baseComponent": "scatterBase",
+ "parameters": {
+ "r1": 0.9,
+ "r2": 0.6
+ },
+ "correctAnswer": [
+ {
+ "id": "buttonsResponse",
+ "answer": "left"
+ }
+ ],
+ "provideFeedback": true
+ }
+}
+```
+
+This trial uses the same base component, but with different correlation values. Here, `r1` is larger than `r2`, so the correct answer is `"left"`.
+
+Add the second practice trial to the same fixed sequence block:
+
+```json title="public/tutorial/replication-config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ {
+ "order": "fixed",
+ "components": [
+ "practice T1 A:0.3 B:0.7",
+ "practice T2 A:0.9 B:0.6"
+ ]
+ }
+ ]
+}
+```
+
+
+
+## Step 5: Add the third practice trial
+
+Add the third practice trial after the second.
+
+```json title="public/tutorial/replication-config.json"
+"components": {
+ "practice T1 A:0.3 B:0.7": { ... },
+ "practice T2 A:0.9 B:0.6": { ... },
+ "practice T3 A:0.6 B:0.3": {
+ "baseComponent": "scatterBase",
+ "parameters": {
+ "r1": 0.6,
+ "r2": 0.3
+ },
+ "correctAnswer": [
+ {
+ "id": "buttonsResponse",
+ "answer": "left"
+ }
+ ],
+ "provideFeedback": true
+ }
+}
+```
+
+Again, this trial inherits from `scatterBase`. The left plot has the higher correlation, so the answer is `"left"`.
+
+Add the third practice trial to the sequence:
+
+```json title="public/tutorial/replication-config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ {
+ "order": "fixed",
+ "components": [
+ "practice T1 A:0.3 B:0.7",
+ "practice T2 A:0.9 B:0.6",
+ "practice T3 A:0.6 B:0.3"
+ ]
+ }
+ ]
+}
+```
+
+All three practice trials use [`provideFeedback`](../designing-studies/answers-trainings.md) so participants can learn what the task is asking before the study moves into the dynamic trial section.
+
+
+
+## Step 6: Add the dynamic JND block
+
+Navigate to `src/public/tutorial/assets/replication/` and open the file named `JNDDynamic.tsx`.
+
+This file currently contains a placeholder. Let's write a function that dynamically changes which component appears next.
+
+```ts title="src/public/tutorial/assets/replication/JNDDynamic.tsx"
+import { JumpFunctionParameters, JumpFunctionReturnVal, StoredAnswer } from '../../../../store/types';
+
+const findLatestTrial = (allDynamicAnswers: StoredAnswer[]) => {
+ const trials = allDynamicAnswers
+ .sort((a, b) => parseInt(a.trialOrder.split('_').at(-1) || '0', 10) - parseInt(b.trialOrder.split('_').at(-1) || '0', 10));
+
+ return trials.at(-1)!;
+};
+
+export default function func({ answers }: JumpFunctionParameters<{ r1: number, r2: number, counter: number }>): JumpFunctionReturnVal {
+ const allDynamicAnswers = Object.values(answers)
+ .filter((answer) => answer.componentName === 'trial');
+
+ // First trial
+ if (allDynamicAnswers.length === 0) {
+ return {
+ component: 'trial',
+ parameters: {
+ r1: 0.1,
+ r2: 0.9,
+ },
+ correctAnswer: [{ id: 'buttonsResponse', answer: 'right' }],
+ };
+ }
+
+ if (allDynamicAnswers.length === 9) {
+ return { component: null };
+ }
+
+ const latestTrial = findLatestTrial(allDynamicAnswers);
+
+ const right = latestTrial.parameters.r2 === 0.9;
+
+ const approachingValue = right ? latestTrial.parameters.r1 + 0.1 : latestTrial.parameters.r2 + 0.1;
+
+ const r1 = right ? 0.9 : approachingValue;
+ const r2 = right ? approachingValue : 0.9;
+
+ return {
+ component: 'trial',
+ parameters: {
+ r1,
+ r2,
+ },
+ correctAnswer: [{ id: 'buttonsResponse', answer: right ? 'left' : 'right' }],
+ };
+}
+```
+
+This function looks at the participant's previous dynamic trial answers. It starts with a large correlation difference, then moves the smaller correlation closer to `0.9` until the dynamic block has shown nine trials.
+
+Then, inside the nested fixed block, add the [dynamic block](../typedoc/interfaces/DynamicBlock.md) after the three practice trials.
+
+```json title="public/tutorial/replication-config.json"
+"sequence": {
+ "order": "fixed",
+ "components": [
+ {
+ "order": "fixed",
+ "components": [
+ "practice T1 A:0.3 B:0.7",
+ "practice T2 A:0.9 B:0.6",
+ "practice T3 A:0.6 B:0.3",
+ {
+ "order": "dynamic",
+ "id": "steppedSequence",
+ "functionPath": "tutorial/assets/replication/JNDDynamic.tsx",
+ "parameters": {}
+ }
+ ]
+ }
+ ]
+}
+```
+
+The dynamic block calls the function at `tutorial/assets/replication/JNDDynamic.tsx`. That function decides what trial comes next and can pass `parameters` and `correctAnswer` into the next generated trial.
+
+
+
+
+import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
+
+
diff --git a/docs/tutorial/tutorial.md b/docs/tutorial/tutorial.md
new file mode 100644
index 0000000000..a4e28018c1
--- /dev/null
+++ b/docs/tutorial/tutorial.md
@@ -0,0 +1,30 @@
+# Tutorial
+
+
+
+
+
+If you want to learn more about reVISit or want a hands-on walkthrough before trying it yourself, start with the video above. This recording is from the VIS 2024 tutorial.
+
+The video shows how to set up and use reVISit - it gives you a feel for the basic workflow before you start editing reVISit project files on your own.
+
+After watching it, follow the [Installation guide](../getting-started/installation.md) to create a study from the template repository. Then work through the written tutorials below, starting with `config.json` and then moving on to `replication-config.json`.
+
+
+import DocCardList from '@theme/DocCardList';
+
+
\ No newline at end of file
diff --git a/docs/typedoc/interfaces/Answer.md b/docs/typedoc/interfaces/Answer.md
index f5a9f51385..ed989d67d3 100644
--- a/docs/typedoc/interfaces/Answer.md
+++ b/docs/typedoc/interfaces/Answer.md
@@ -1,6 +1,6 @@
# Answer
-Defined in: [parser/types.ts:975](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L975)
+Defined in: [parser/types.ts:975](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L975)
The Answer interface is used to define the properties of an answer. Answers are used to define the correct answer for a task. These are generally used in training tasks or if skip logic is required based on the answer.
@@ -33,7 +33,7 @@ In this example, the correct answer to the question "What is 2 + 2?" is 4. If th
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `acceptableHigh?` | `number` | The acceptable high value for the answer. This is used to define a range of acceptable answers. | [parser/types.ts:984](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L984) |
-| `acceptableLow?` | `number` | The acceptable low value for the answer. This is used to define a range of acceptable answers. | [parser/types.ts:982](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L982) |
-| `answer` | `any` | The correct answer to the question. | [parser/types.ts:980](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L980) |
-| `id` | `string` | The id of the answer. This is used to identify the answer in the data file. | [parser/types.ts:977](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L977) |
+| `acceptableHigh?` | `number` | The acceptable high value for the answer. This is used to define a range of acceptable answers. | [parser/types.ts:984](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L984) |
+| `acceptableLow?` | `number` | The acceptable low value for the answer. This is used to define a range of acceptable answers. | [parser/types.ts:982](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L982) |
+| `answer` | `any` | The correct answer to the question. | [parser/types.ts:980](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L980) |
+| `id` | `string` | The id of the answer. This is used to identify the answer in the data file. | [parser/types.ts:977](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L977) |
diff --git a/docs/typedoc/interfaces/BaseIndividualComponent.md b/docs/typedoc/interfaces/BaseIndividualComponent.md
index b9ec3e0114..61d511c208 100644
--- a/docs/typedoc/interfaces/BaseIndividualComponent.md
+++ b/docs/typedoc/interfaces/BaseIndividualComponent.md
@@ -1,6 +1,6 @@
# BaseIndividualComponent
-Defined in: [parser/types.ts:994](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L994)
+Defined in: [parser/types.ts:994](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L994)
The BaseIndividualComponent interface is used to define the required fields for all components.
@@ -23,34 +23,37 @@ There are other fields that can be included in a component that are used to iden
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [parser/types.ts:1041](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1041) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [parser/types.ts:1045](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1045) |
-| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1001) |
-| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1005) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [parser/types.ts:1049](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1049) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [parser/types.ts:1021](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1021) |
-| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [parser/types.ts:1017](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1017) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [parser/types.ts:1019](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1019) |
-| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1003) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [parser/types.ts:1031](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1031) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [parser/types.ts:1029](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1029) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [parser/types.ts:1027](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1027) |
-| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [parser/types.ts:1025](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1025) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [parser/types.ts:1023](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1023) |
-| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [parser/types.ts:1033](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1033) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [parser/types.ts:1035](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1035) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [parser/types.ts:1037](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1037) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [parser/types.ts:1043](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1043) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [parser/types.ts:1047](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1047) |
-| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L997) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [parser/types.ts:1051](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1051) |
-| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [parser/types.ts:1055](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1055) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [parser/types.ts:1013](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1013) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [parser/types.ts:1015](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1015) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1011) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [parser/types.ts:1059](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1059) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [parser/types.ts:1057](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1057) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [parser/types.ts:1039](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1039) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [parser/types.ts:1053](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1053) |
-| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1007) |
-| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1009) |
+| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [parser/types.ts:1047](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1047) |
+| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [parser/types.ts:1051](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1051) |
+| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1001) |
+| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1005) |
+| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [parser/types.ts:1055](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1055) |
+| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [parser/types.ts:1021](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1021) |
+| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [parser/types.ts:1017](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1017) |
+| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [parser/types.ts:1019](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1019) |
+| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1003) |
+| `nextButtonAutoAdvanceTime?` | `number` | The time in milliseconds after which the participant is automatically advanced to the next component without saving answers from the current component. | [parser/types.ts:1033](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1033) |
+| `nextButtonAutoAdvanceWarningMessage?` | `string` | The warning message shown before auto-advance. Include `{seconds}` to interpolate the remaining number and `{unit}` to interpolate `second`/`seconds`. | [parser/types.ts:1037](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1037) |
+| `nextButtonAutoAdvanceWarningTime?` | `number` | The time in milliseconds before auto-advance when the warning message is shown. Defaults to 30000. | [parser/types.ts:1035](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1035) |
+| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [parser/types.ts:1031](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1031) |
+| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [parser/types.ts:1029](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1029) |
+| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [parser/types.ts:1027](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1027) |
+| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [parser/types.ts:1025](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1025) |
+| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [parser/types.ts:1023](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1023) |
+| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [parser/types.ts:1039](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1039) |
+| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [parser/types.ts:1041](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1041) |
+| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [parser/types.ts:1043](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1043) |
+| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [parser/types.ts:1049](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1049) |
+| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [parser/types.ts:1053](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1053) |
+| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L997) |
+| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [parser/types.ts:1057](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1057) |
+| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [parser/types.ts:1061](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1061) |
+| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [parser/types.ts:1013](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1013) |
+| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [parser/types.ts:1015](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1015) |
+| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1011) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [parser/types.ts:1065](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1065) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [parser/types.ts:1063](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1063) |
+| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [parser/types.ts:1045](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1045) |
+| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [parser/types.ts:1059](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1059) |
+| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1007) |
+| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1009) |
diff --git a/docs/typedoc/interfaces/BaseResponse.md b/docs/typedoc/interfaces/BaseResponse.md
index 84e0754cd5..c06056343f 100644
--- a/docs/typedoc/interfaces/BaseResponse.md
+++ b/docs/typedoc/interfaces/BaseResponse.md
@@ -1,6 +1,6 @@
# BaseResponse
-Defined in: [parser/types.ts:360](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L360)
+Defined in: [parser/types.ts:360](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L360)
The BaseResponse interface is used to define the required fields for all responses.
Other Response interfaces inherit properties from the BaseResponse interface.
@@ -25,18 +25,18 @@ Therefore, all responses must include these properties.
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L390) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L380) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L362) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L368) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L372) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L378) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L364) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L370) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L376) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L374) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L366) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L388) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L386) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L382) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L384) |
+| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L390) |
+| `hidden?` | `boolean` | Controls whether the response is hidden. | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L380) |
+| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L362) |
+| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L368) |
+| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L372) |
+| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L378) |
+| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L364) |
+| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L370) |
+| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L376) |
+| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L374) |
+| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L366) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L388) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L386) |
+| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L382) |
+| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L384) |
diff --git a/docs/typedoc/interfaces/ButtonsResponse.md b/docs/typedoc/interfaces/ButtonsResponse.md
index 8712dada30..6a6e955e33 100644
--- a/docs/typedoc/interfaces/ButtonsResponse.md
+++ b/docs/typedoc/interfaces/ButtonsResponse.md
@@ -1,6 +1,6 @@
# ButtonsResponse
-Defined in: [parser/types.ts:877](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L877)
+Defined in: [parser/types.ts:877](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L877)
The ButtonsResponse interface is used to define the properties of a buttons response.
ButtonsResponses render as a list of buttons that the participant can click. When a button is clicked, the value of the button is stored in the data file.
@@ -29,22 +29,22 @@ In this example, the participant can click one of the buttons labeled "Option 1"
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `string` | The default value of the response. Specify one option value as a string. | - | [parser/types.ts:881](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L881) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L390) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L380) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L362) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L368) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L372) |
-| `optionOrder?` | `"random"` \| `"fixed"` | The order in which the buttons are displayed. Defaults to fixed. | - | [parser/types.ts:883](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L883) |
-| `options` | (`string` \| [`StringOption`](StringOption.md))[] | - | - | [parser/types.ts:879](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L879) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L378) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L364) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L370) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L376) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L374) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L366) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L388) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L386) |
-| `type` | `"buttons"` | - | - | [parser/types.ts:878](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L878) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L382) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L384) |
+| `default?` | `string` | The default value of the response. Specify one option value as a string. | - | [parser/types.ts:881](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L881) |
+| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L390) |
+| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L380) |
+| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L362) |
+| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L368) |
+| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L372) |
+| `optionOrder?` | `"random"` \| `"fixed"` | The order in which the buttons are displayed. Defaults to fixed. | - | [parser/types.ts:883](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L883) |
+| `options` | (`string` \| [`StringOption`](StringOption.md))[] | - | - | [parser/types.ts:879](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L879) |
+| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L378) |
+| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L364) |
+| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L370) |
+| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L376) |
+| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L374) |
+| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L366) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L388) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L386) |
+| `type` | `"buttons"` | - | - | [parser/types.ts:878](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L878) |
+| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L382) |
+| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L384) |
diff --git a/docs/typedoc/interfaces/CheckboxResponse.md b/docs/typedoc/interfaces/CheckboxResponse.md
index 7220fb46d6..92858a7f45 100644
--- a/docs/typedoc/interfaces/CheckboxResponse.md
+++ b/docs/typedoc/interfaces/CheckboxResponse.md
@@ -1,6 +1,6 @@
# CheckboxResponse
-Defined in: [parser/types.ts:741](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L741)
+Defined in: [parser/types.ts:741](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L741)
The CheckboxResponse interface is used to define the properties of a checkbox response.
CheckboxResponses render as a checkbox input with user specified options.
@@ -24,26 +24,26 @@ CheckboxResponses render as a checkbox input with user specified options.
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `string`[] | The default value of the response. Specify an array of option values. To preselect the "I don't know" checkbox, include `"I don't know"`. | - | [parser/types.ts:746](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L746) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L390) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L380) |
-| `horizontal?` | `boolean` | Whether to render the checkboxes horizontally. Defaults to false, so they render horizontally. | - | [parser/types.ts:754](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L754) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L362) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L368) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L372) |
-| `maxSelections?` | `number` | The maximum number of selections that are required. | - | [parser/types.ts:752](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L752) |
-| `minSelections?` | `number` | The minimum number of selections that are required. | - | [parser/types.ts:750](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L750) |
-| `optionOrder?` | `"random"` \| `"fixed"` | The order in which the checkboxes are displayed. Defaults to fixed. | - | [parser/types.ts:748](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L748) |
-| `options` | (`string` \| [`StringOption`](StringOption.md))[] | The options that are displayed as checkboxes, provided as an array of objects, with label and value fields. | - | [parser/types.ts:744](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L744) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L378) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L364) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L370) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L376) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L374) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L366) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L388) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L386) |
-| `type` | `"checkbox"` | - | - | [parser/types.ts:742](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L742) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L382) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L384) |
-| `withOther?` | `boolean` | Whether to render the checkboxes with an "other" option. | - | [parser/types.ts:756](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L756) |
+| `default?` | `string`[] | The default value of the response. Specify an array of option values. To preselect the "I don't know" checkbox, include `"I don't know"`. | - | [parser/types.ts:746](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L746) |
+| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L390) |
+| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L380) |
+| `horizontal?` | `boolean` | Whether to render the checkboxes horizontally. Defaults to false, so they render horizontally. | - | [parser/types.ts:754](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L754) |
+| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L362) |
+| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L368) |
+| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L372) |
+| `maxSelections?` | `number` | The maximum number of selections that are required. | - | [parser/types.ts:752](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L752) |
+| `minSelections?` | `number` | The minimum number of selections that are required. | - | [parser/types.ts:750](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L750) |
+| `optionOrder?` | `"random"` \| `"fixed"` | The order in which the checkboxes are displayed. Defaults to fixed. | - | [parser/types.ts:748](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L748) |
+| `options` | (`string` \| [`StringOption`](StringOption.md))[] | The options that are displayed as checkboxes, provided as an array of objects, with label and value fields. | - | [parser/types.ts:744](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L744) |
+| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L378) |
+| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L364) |
+| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L370) |
+| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L376) |
+| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L374) |
+| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L366) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L388) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L386) |
+| `type` | `"checkbox"` | - | - | [parser/types.ts:742](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L742) |
+| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L382) |
+| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L384) |
+| `withOther?` | `boolean` | Whether to render the checkboxes with an "other" option. | - | [parser/types.ts:756](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L756) |
diff --git a/docs/typedoc/interfaces/ComponentBlock.md b/docs/typedoc/interfaces/ComponentBlock.md
index 2a3e502f0f..626fe0aae9 100644
--- a/docs/typedoc/interfaces/ComponentBlock.md
+++ b/docs/typedoc/interfaces/ComponentBlock.md
@@ -1,6 +1,6 @@
# ComponentBlock
-Defined in: [parser/types.ts:1741](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1741)
+Defined in: [parser/types.ts:1747](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1747)
The ComponentBlock interface is used to define order properties within the sequence. This is used to define the order of components in a study and the skip logic. It supports random assignment of trials using a pure random assignment and a [latin square](https://en.wikipedia.org/wiki/Latin_square).
@@ -110,10 +110,10 @@ The skip property is used to define skip conditions. This is used to skip to a d
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `components` | (`string` \| `ComponentBlock` \| [`DynamicBlock`](DynamicBlock.md))[] | The components that are included in the order. | [parser/types.ts:1747](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1747) |
-| `conditional?` | `boolean` | The conditional property shows the block only when the URL condition matches its `id`. | [parser/types.ts:1755](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1755) |
-| `id?` | `string` | The id of the block. This is used to identify the block in the SkipConditions and is only required if you want to refer to the whole block in the condition.to property. | [parser/types.ts:1743](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1743) |
-| `interruptions?` | [`InterruptionBlock`](../type-aliases/InterruptionBlock.md)[] | The interruptions property specifies an array of interruptions. These can be used for breaks or attention checks. | [parser/types.ts:1751](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1751) |
-| `numSamples?` | `number` | The number of samples to use for the random assignments. This means you can randomize across 3 components while only showing a participant 2 at a time. | [parser/types.ts:1749](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1749) |
-| `order` | `"random"` \| `"latinSquare"` \| `"fixed"` | The type of order. This can be random (pure random), latinSquare (random with some guarantees), or fixed. | [parser/types.ts:1745](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1745) |
-| `skip?` | [`SkipConditions`](../type-aliases/SkipConditions.md) | The skip conditions for the block. | [parser/types.ts:1753](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1753) |
+| `components` | (`string` \| `ComponentBlock` \| [`DynamicBlock`](DynamicBlock.md))[] | The components that are included in the order. | [parser/types.ts:1753](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1753) |
+| `conditional?` | `boolean` | The conditional property shows the block only when the URL condition matches its `id`. | [parser/types.ts:1761](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1761) |
+| `id?` | `string` | The id of the block. This is used to identify the block in the SkipConditions and is only required if you want to refer to the whole block in the condition.to property. | [parser/types.ts:1749](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1749) |
+| `interruptions?` | [`InterruptionBlock`](../type-aliases/InterruptionBlock.md)[] | The interruptions property specifies an array of interruptions. These can be used for breaks or attention checks. | [parser/types.ts:1757](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1757) |
+| `numSamples?` | `number` | The number of samples to use for the random assignments. This means you can randomize across 3 components while only showing a participant 2 at a time. | [parser/types.ts:1755](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1755) |
+| `order` | `"random"` \| `"latinSquare"` \| `"fixed"` | The type of order. This can be random (pure random), latinSquare (random with some guarantees), or fixed. | [parser/types.ts:1751](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1751) |
+| `skip?` | [`SkipConditions`](../type-aliases/SkipConditions.md) | The skip conditions for the block. | [parser/types.ts:1759](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1759) |
diff --git a/docs/typedoc/interfaces/ComponentBlockCondition.md b/docs/typedoc/interfaces/ComponentBlockCondition.md
index a68a4614ef..ad0cce93b6 100644
--- a/docs/typedoc/interfaces/ComponentBlockCondition.md
+++ b/docs/typedoc/interfaces/ComponentBlockCondition.md
@@ -1,6 +1,6 @@
# ComponentBlockCondition
-Defined in: [parser/types.ts:1549](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1549)
+Defined in: [parser/types.ts:1555](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1555)
The ComponentBlockCondition interface is used to define a SkipCondition based on the number of correct or incorrect components in a block. All answers on all components in the block are checked.
@@ -31,7 +31,7 @@ When the condition is met, the participant will immediately be redirected to the
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `check` | `"block"` | The check we'll perform. | [parser/types.ts:1551](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1551) |
-| `condition` | `"numCorrect"` \| `"numIncorrect"` | The condition to check. | [parser/types.ts:1553](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1553) |
-| `to` | `string` | The id of the component or block to skip to | [parser/types.ts:1557](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1557) |
-| `value` | `number` | The number of correct or incorrect responses to check for. | [parser/types.ts:1555](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1555) |
+| `check` | `"block"` | The check we'll perform. | [parser/types.ts:1557](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1557) |
+| `condition` | `"numCorrect"` \| `"numIncorrect"` | The condition to check. | [parser/types.ts:1559](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1559) |
+| `to` | `string` | The id of the component or block to skip to | [parser/types.ts:1563](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1563) |
+| `value` | `number` | The number of correct or incorrect responses to check for. | [parser/types.ts:1561](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1561) |
diff --git a/docs/typedoc/interfaces/CustomResponse.md b/docs/typedoc/interfaces/CustomResponse.md
index a42089eddd..45f3013709 100644
--- a/docs/typedoc/interfaces/CustomResponse.md
+++ b/docs/typedoc/interfaces/CustomResponse.md
@@ -1,6 +1,6 @@
# CustomResponse
-Defined in: [parser/types.ts:847](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L847)
+Defined in: [parser/types.ts:847](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L847)
The CustomResponse interface is used to define the properties of a response rendered by React code in `src/public`.
This is useful when built-in response types do not fit the interaction you need, but you still want the response to participate in the standard form, validation, provenance, and answer-saving flow.
@@ -34,22 +34,22 @@ Example:
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `default?` | [`JsonValue`](../type-aliases/JsonValue.md) | The default value of the response. Must be JSON-serializable. | - | [parser/types.ts:854](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L854) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L390) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L380) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L362) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L368) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L372) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L378) |
-| `parameters?` | `Record`\<`string`, `unknown`\> | Parameters passed to the custom response component. | - | [parser/types.ts:852](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L852) |
-| `path` | `string` | The path to the react component. This should be a relative path from the src/public folder. | - | [parser/types.ts:850](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L850) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L364) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L370) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L376) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L374) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L366) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L388) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L386) |
-| `type` | `"custom"` | - | - | [parser/types.ts:848](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L848) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L382) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L384) |
+| `default?` | [`JsonValue`](../type-aliases/JsonValue.md) | The default value of the response. Must be JSON-serializable. | - | [parser/types.ts:854](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L854) |
+| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L390) |
+| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L380) |
+| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L362) |
+| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L368) |
+| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L372) |
+| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L378) |
+| `parameters?` | `Record`\<`string`, `unknown`\> | Parameters passed to the custom response component. | - | [parser/types.ts:852](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L852) |
+| `path` | `string` | The path to the react component. This should be a relative path from the src/public folder. | - | [parser/types.ts:850](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L850) |
+| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L364) |
+| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L370) |
+| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L376) |
+| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L374) |
+| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L366) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L388) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L386) |
+| `type` | `"custom"` | - | - | [parser/types.ts:848](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L848) |
+| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L382) |
+| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L384) |
diff --git a/docs/typedoc/interfaces/DeterministicInterruption.md b/docs/typedoc/interfaces/DeterministicInterruption.md
index ae2bc526a7..ccaf3cd464 100644
--- a/docs/typedoc/interfaces/DeterministicInterruption.md
+++ b/docs/typedoc/interfaces/DeterministicInterruption.md
@@ -1,6 +1,6 @@
# DeterministicInterruption
-Defined in: [parser/types.ts:1385](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1385)
+Defined in: [parser/types.ts:1391](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1391)
The DeterministicInterruption interface is used to define an interruption that will be shown at a specific location in the block.
@@ -49,6 +49,6 @@ The resulting sequence array could be:
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `components` | `string`[] | The components that are included in the interruption. These reference components in the StudyConfig.components section of the config. | [parser/types.ts:1391](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1391) |
-| `firstLocation` | `number` | The Location of the first instance of the interruption. If this is set to 2, the interruption will be shown after the second component (inserted at index 2). | [parser/types.ts:1387](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1387) |
-| `spacing` | `number` | The number of components between breaks. | [parser/types.ts:1389](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1389) |
+| `components` | `string`[] | The components that are included in the interruption. These reference components in the StudyConfig.components section of the config. | [parser/types.ts:1397](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1397) |
+| `firstLocation` | `number` | The Location of the first instance of the interruption. If this is set to 2, the interruption will be shown after the second component (inserted at index 2). | [parser/types.ts:1393](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1393) |
+| `spacing` | `number` | The number of components between breaks. | [parser/types.ts:1395](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1395) |
diff --git a/docs/typedoc/interfaces/DividerResponse.md b/docs/typedoc/interfaces/DividerResponse.md
index 34635c384f..10cdaed66d 100644
--- a/docs/typedoc/interfaces/DividerResponse.md
+++ b/docs/typedoc/interfaces/DividerResponse.md
@@ -1,6 +1,6 @@
# DividerResponse
-Defined in: [parser/types.ts:931](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L931)
+Defined in: [parser/types.ts:931](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L931)
## Extends
@@ -10,19 +10,19 @@ Defined in: [parser/types.ts:931](https://github.com/revisit-studies/study/blob/
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L390) |
-| `hidden?` | `undefined` | - | - | [parser/types.ts:941](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L941) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L362) |
-| `infoText?` | `undefined` | - | - | [parser/types.ts:935](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L935) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L372) |
-| `paramCapture?` | `undefined` | - | - | [parser/types.ts:940](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L940) |
-| `prompt?` | `undefined` | - | - | [parser/types.ts:934](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L934) |
-| `required?` | `undefined` | - | - | [parser/types.ts:937](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L937) |
-| `requiredLabel?` | `undefined` | - | - | [parser/types.ts:939](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L939) |
-| `requiredValue?` | `undefined` | - | - | [parser/types.ts:938](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L938) |
-| `secondaryText?` | `undefined` | - | - | [parser/types.ts:936](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L936) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L388) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L386) |
-| `type` | `"divider"` | - | - | [parser/types.ts:932](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L932) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L382) |
-| `withDontKnow?` | `undefined` | - | - | [parser/types.ts:942](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L942) |
+| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L390) |
+| `hidden?` | `undefined` | - | - | [parser/types.ts:941](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L941) |
+| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L362) |
+| `infoText?` | `undefined` | - | - | [parser/types.ts:935](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L935) |
+| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L372) |
+| `paramCapture?` | `undefined` | - | - | [parser/types.ts:940](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L940) |
+| `prompt?` | `undefined` | - | - | [parser/types.ts:934](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L934) |
+| `required?` | `undefined` | - | - | [parser/types.ts:937](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L937) |
+| `requiredLabel?` | `undefined` | - | - | [parser/types.ts:939](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L939) |
+| `requiredValue?` | `undefined` | - | - | [parser/types.ts:938](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L938) |
+| `secondaryText?` | `undefined` | - | - | [parser/types.ts:936](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L936) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L388) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L386) |
+| `type` | `"divider"` | - | - | [parser/types.ts:932](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L932) |
+| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L382) |
+| `withDontKnow?` | `undefined` | - | - | [parser/types.ts:942](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L942) |
diff --git a/docs/typedoc/interfaces/DropdownResponse.md b/docs/typedoc/interfaces/DropdownResponse.md
index 1a573b3b42..b79d060637 100644
--- a/docs/typedoc/interfaces/DropdownResponse.md
+++ b/docs/typedoc/interfaces/DropdownResponse.md
@@ -1,6 +1,6 @@
# DropdownResponse
-Defined in: [parser/types.ts:623](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L623)
+Defined in: [parser/types.ts:623](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L623)
The DropdownResponse interface is used to define the properties of a dropdown response.
DropdownResponses render as a select input with user specified options.
@@ -40,24 +40,24 @@ Here's an example of a multiselect dropdown with minimum and maximum selections:
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `string` \| `string`[] | The default value of the response. Use a string for single-select dropdowns and a string array for multiselect dropdowns. | - | [parser/types.ts:628](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L628) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L390) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L380) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L362) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L368) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L372) |
-| `maxSelections?` | `number` | The maximum number of selections that are required. This will make the dropdown a multiselect dropdown. | - | [parser/types.ts:634](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L634) |
-| `minSelections?` | `number` | The minimum number of selections that are required. This will make the dropdown a multiselect dropdown. | - | [parser/types.ts:632](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L632) |
-| `options` | (`string` \| [`StringOption`](StringOption.md))[] | The options that are displayed in the dropdown. | - | [parser/types.ts:630](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L630) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L378) |
-| `placeholder?` | `string` | The placeholder text that is displayed in the input. | - | [parser/types.ts:626](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L626) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L364) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L370) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L376) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L374) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L366) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L388) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L386) |
-| `type` | `"dropdown"` | - | - | [parser/types.ts:624](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L624) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L382) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L384) |
+| `default?` | `string` \| `string`[] | The default value of the response. Use a string for single-select dropdowns and a string array for multiselect dropdowns. | - | [parser/types.ts:628](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L628) |
+| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L390) |
+| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L380) |
+| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L362) |
+| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L368) |
+| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L372) |
+| `maxSelections?` | `number` | The maximum number of selections that are required. This will make the dropdown a multiselect dropdown. | - | [parser/types.ts:634](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L634) |
+| `minSelections?` | `number` | The minimum number of selections that are required. This will make the dropdown a multiselect dropdown. | - | [parser/types.ts:632](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L632) |
+| `options` | (`string` \| [`StringOption`](StringOption.md))[] | The options that are displayed in the dropdown. | - | [parser/types.ts:630](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L630) |
+| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L378) |
+| `placeholder?` | `string` | The placeholder text that is displayed in the input. | - | [parser/types.ts:626](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L626) |
+| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L364) |
+| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L370) |
+| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L376) |
+| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L374) |
+| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L366) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L388) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L386) |
+| `type` | `"dropdown"` | - | - | [parser/types.ts:624](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L624) |
+| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L382) |
+| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L384) |
diff --git a/docs/typedoc/interfaces/DynamicBlock.md b/docs/typedoc/interfaces/DynamicBlock.md
index 2e31b261d8..194e07211a 100644
--- a/docs/typedoc/interfaces/DynamicBlock.md
+++ b/docs/typedoc/interfaces/DynamicBlock.md
@@ -1,6 +1,6 @@
# DynamicBlock
-Defined in: [parser/types.ts:1624](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1624)
+Defined in: [parser/types.ts:1630](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1630)
The DynamicBlock interface is used to define a block where displayed components are controlled by a function. This is useful when you want to generate the sequence based on answers to previous questions or other factors.
@@ -24,8 +24,8 @@ Here's an example of how to use the DynamicBlock:
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `conditional?` | `boolean` | The conditional property shows the block only when the URL condition matches its `id`. | [parser/types.ts:1634](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1634) |
-| `functionPath` | `string` | The path to the function that generates the components. This should be a relative path from the src/public folder. | [parser/types.ts:1630](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1630) |
-| `id` | `string` | The id of the block. This is used to identify the block in the SkipConditions and is only required if you want to refer to the whole block in the condition.to property. | [parser/types.ts:1626](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1626) |
-| `order` | `"dynamic"` | The type of order. This can be random (pure random), latinSquare (random with some guarantees), or fixed. | [parser/types.ts:1628](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1628) |
-| `parameters?` | `Record`\<`string`, `unknown`\> | The parameters that are passed to the function. These can be used within your function to render different things. | [parser/types.ts:1632](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1632) |
+| `conditional?` | `boolean` | The conditional property shows the block only when the URL condition matches its `id`. | [parser/types.ts:1640](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1640) |
+| `functionPath` | `string` | The path to the function that generates the components. This should be a relative path from the src/public folder. | [parser/types.ts:1636](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1636) |
+| `id` | `string` | The id of the block. This is used to identify the block in the SkipConditions and is only required if you want to refer to the whole block in the condition.to property. | [parser/types.ts:1632](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1632) |
+| `order` | `"dynamic"` | The type of order. This can be random (pure random), latinSquare (random with some guarantees), or fixed. | [parser/types.ts:1634](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1634) |
+| `parameters?` | `Record`\<`string`, `unknown`\> | The parameters that are passed to the function. These can be used within your function to render different things. | [parser/types.ts:1638](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1638) |
diff --git a/docs/typedoc/interfaces/GlobalConfig.md b/docs/typedoc/interfaces/GlobalConfig.md
index c699894d5f..8a14e8250c 100644
--- a/docs/typedoc/interfaces/GlobalConfig.md
+++ b/docs/typedoc/interfaces/GlobalConfig.md
@@ -1,6 +1,6 @@
# GlobalConfig
-Defined in: [parser/types.ts:15](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L15)
+Defined in: [parser/types.ts:15](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L15)
The GlobalConfig is used to generate the list of available studies in the UI.
This list is displayed on the landing page when running the app.
@@ -9,6 +9,6 @@ This list is displayed on the landing page when running the app.
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `$schema` | `string` | A required json schema property. This should point to the GitHub link for the version of the schema you would like. See examples in the public folder for more information. | [parser/types.ts:17](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L17) |
-| `configs` | `object` | A required property that specifies the options for the configList property. | [parser/types.ts:19](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L19) |
-| `configsList` | `string`[] | A required property that is used to generate the list of available studies in the UI. This list is displayed on the landing page when running the app. | [parser/types.ts:29](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L29) |
+| `$schema` | `string` | A required json schema property. This should point to the GitHub link for the version of the schema you would like. See examples in the public folder for more information. | [parser/types.ts:17](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L17) |
+| `configs` | `object` | A required property that specifies the options for the configList property. | [parser/types.ts:19](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L19) |
+| `configsList` | `string`[] | A required property that is used to generate the list of available studies in the UI. This list is displayed on the landing page when running the app. | [parser/types.ts:29](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L29) |
diff --git a/docs/typedoc/interfaces/ImageComponent.md b/docs/typedoc/interfaces/ImageComponent.md
index d914b55d6e..97baced146 100644
--- a/docs/typedoc/interfaces/ImageComponent.md
+++ b/docs/typedoc/interfaces/ImageComponent.md
@@ -1,6 +1,6 @@
# ImageComponent
-Defined in: [parser/types.ts:1144](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1144)
+Defined in: [parser/types.ts:1150](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1150)
The ImageComponent interface is used to define the properties of an image component. This component is used to render an image with optional styling.
@@ -23,36 +23,39 @@ For example, to render an image with a path of `path/to/study/assets/image.jpg`
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:1041](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1041) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:1045](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1045) |
-| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1001) |
-| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1005) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1049](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1049) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:1021](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1021) |
-| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:1017](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1017) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:1019](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1019) |
-| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1003) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:1031](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1031) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:1029](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1029) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:1027](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1027) |
-| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:1025](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1025) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:1023](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1023) |
-| `path` | `string` | The path to the image. This could be a relative path from the public folder or a url to an external image. | - | [parser/types.ts:1147](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1147) |
-| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:1033](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1033) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:1035](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1035) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:1037](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1037) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:1043](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1043) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:1047](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1047) |
-| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L997) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1051](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1051) |
-| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1055](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1055) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:1013](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1013) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:1015](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1015) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1011) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1059](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1059) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1057](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1057) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:1039](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1039) |
-| `type` | `"image"` | - | - | [parser/types.ts:1145](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1145) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1053](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1053) |
-| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1007) |
-| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1009) |
+| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:1047](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1047) |
+| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:1051](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1051) |
+| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1001) |
+| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1005) |
+| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1055](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1055) |
+| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:1021](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1021) |
+| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:1017](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1017) |
+| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:1019](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1019) |
+| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1003) |
+| `nextButtonAutoAdvanceTime?` | `number` | The time in milliseconds after which the participant is automatically advanced to the next component without saving answers from the current component. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceTime`](BaseIndividualComponent.md#nextbuttonautoadvancetime) | [parser/types.ts:1033](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1033) |
+| `nextButtonAutoAdvanceWarningMessage?` | `string` | The warning message shown before auto-advance. Include `{seconds}` to interpolate the remaining number and `{unit}` to interpolate `second`/`seconds`. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceWarningMessage`](BaseIndividualComponent.md#nextbuttonautoadvancewarningmessage) | [parser/types.ts:1037](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1037) |
+| `nextButtonAutoAdvanceWarningTime?` | `number` | The time in milliseconds before auto-advance when the warning message is shown. Defaults to 30000. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceWarningTime`](BaseIndividualComponent.md#nextbuttonautoadvancewarningtime) | [parser/types.ts:1035](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1035) |
+| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:1031](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1031) |
+| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:1029](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1029) |
+| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:1027](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1027) |
+| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:1025](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1025) |
+| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:1023](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1023) |
+| `path` | `string` | The path to the image. This could be a relative path from the public folder or a url to an external image. | - | [parser/types.ts:1153](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1153) |
+| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:1039](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1039) |
+| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:1041](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1041) |
+| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:1043](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1043) |
+| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:1049](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1049) |
+| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:1053](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1053) |
+| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L997) |
+| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1057](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1057) |
+| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1061](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1061) |
+| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:1013](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1013) |
+| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:1015](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1015) |
+| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1011) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1065](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1065) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1063](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1063) |
+| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:1045](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1045) |
+| `type` | `"image"` | - | - | [parser/types.ts:1151](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1151) |
+| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1059](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1059) |
+| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1007) |
+| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1009) |
diff --git a/docs/typedoc/interfaces/IndividualComponentAllResponsesCondition.md b/docs/typedoc/interfaces/IndividualComponentAllResponsesCondition.md
index f172b96810..469c6d0dda 100644
--- a/docs/typedoc/interfaces/IndividualComponentAllResponsesCondition.md
+++ b/docs/typedoc/interfaces/IndividualComponentAllResponsesCondition.md
@@ -1,6 +1,6 @@
# IndividualComponentAllResponsesCondition
-Defined in: [parser/types.ts:1515](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1515)
+Defined in: [parser/types.ts:1521](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1521)
The IndividualComponentAllResponsesCondition interface is used to define a SkipCondition based on all answers to a specific component. The skip logic will be checked for every component in the block that has the specified name.
@@ -30,6 +30,6 @@ In this example, if all responses to the component with the ID "attentionCheck"
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `check` | `"responses"` | The check we'll perform. | [parser/types.ts:1519](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1519) |
-| `name` | `string` | The name of the component to check. | [parser/types.ts:1517](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1517) |
-| `to` | `string` | The id of the component or block to skip to | [parser/types.ts:1521](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1521) |
+| `check` | `"responses"` | The check we'll perform. | [parser/types.ts:1525](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1525) |
+| `name` | `string` | The name of the component to check. | [parser/types.ts:1523](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1523) |
+| `to` | `string` | The id of the component or block to skip to | [parser/types.ts:1527](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1527) |
diff --git a/docs/typedoc/interfaces/IndividualComponentSingleResponseCondition.md b/docs/typedoc/interfaces/IndividualComponentSingleResponseCondition.md
index ced767871f..5f55cfe2a7 100644
--- a/docs/typedoc/interfaces/IndividualComponentSingleResponseCondition.md
+++ b/docs/typedoc/interfaces/IndividualComponentSingleResponseCondition.md
@@ -1,6 +1,6 @@
# IndividualComponentSingleResponseCondition
-Defined in: [parser/types.ts:1476](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1476)
+Defined in: [parser/types.ts:1482](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1482)
The IndividualComponentSingleResponseCondition interface is used to define a SkipCondition based on a single answer to a specific component. The skip logic will be checked for every component in the block that has the specified name.
@@ -33,9 +33,9 @@ In this example, we assign our skip logic to the component whose ID is "attentio
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `check` | `"response"` | The check we'll perform. | [parser/types.ts:1480](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1480) |
-| `comparison` | `"equal"` \| `"notEqual"` | The comparison to use. | [parser/types.ts:1486](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1486) |
-| `name` | `string` | The name of the component to check. | [parser/types.ts:1478](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1478) |
-| `responseId` | `string` | The response id to check. | [parser/types.ts:1482](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1482) |
-| `to` | `string` | The id of the component or block to skip to | [parser/types.ts:1488](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1488) |
-| `value` | `string` \| `number` | The value to check. | [parser/types.ts:1484](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1484) |
+| `check` | `"response"` | The check we'll perform. | [parser/types.ts:1486](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1486) |
+| `comparison` | `"equal"` \| `"notEqual"` | The comparison to use. | [parser/types.ts:1492](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1492) |
+| `name` | `string` | The name of the component to check. | [parser/types.ts:1484](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1484) |
+| `responseId` | `string` | The response id to check. | [parser/types.ts:1488](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1488) |
+| `to` | `string` | The id of the component or block to skip to | [parser/types.ts:1494](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1494) |
+| `value` | `string` \| `number` | The value to check. | [parser/types.ts:1490](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1490) |
diff --git a/docs/typedoc/interfaces/JsonObject.md b/docs/typedoc/interfaces/JsonObject.md
index 3c6df260a9..847840e7df 100644
--- a/docs/typedoc/interfaces/JsonObject.md
+++ b/docs/typedoc/interfaces/JsonObject.md
@@ -1,6 +1,6 @@
# JsonObject
-Defined in: [parser/types.ts:6](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L6)
+Defined in: [parser/types.ts:6](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L6)
## Indexable
diff --git a/docs/typedoc/interfaces/LibraryConfig.md b/docs/typedoc/interfaces/LibraryConfig.md
index 1360d895ef..4c51e7cb79 100644
--- a/docs/typedoc/interfaces/LibraryConfig.md
+++ b/docs/typedoc/interfaces/LibraryConfig.md
@@ -1,6 +1,6 @@
# LibraryConfig
-Defined in: [parser/types.ts:1870](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1870)
+Defined in: [parser/types.ts:1876](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1876)
LibraryConfig is used to define the properties of a library configuration. This is a JSON object with three main components: baseComponents, components, and the sequences. Libraries are useful for defining components and sequences of these components that are to be reused across multiple studies. We (the reVISit team) provide several libraries that can be used in your study configurations. Check the public/libraries folder in the reVISit-studies repository for available libraries. We also plan to accept community contributions for libraries. If you have a library that you think would be useful for others, please reach out to us. We would love to include it in our repository.
@@ -8,7 +8,7 @@ Below is the general template that should be followed when constructing a Librar
```json
{
- "$schema": "https://raw.githubusercontent.com/revisit-studies/study/v2.4.2/src/parser/LibraryConfigSchema.json",
+ "$schema": "https://raw.githubusercontent.com/revisit-studies/study/v2.4.3/src/parser/LibraryConfigSchema.json",
"baseComponents": {
// BaseComponents here are defined exactly as is in the StudyConfig
},
@@ -25,12 +25,12 @@ Below is the general template that should be followed when constructing a Librar
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `$schema` | `string` | A required json schema property. This should point to the github link for the version of the schema you would like. The `$schema` line is used to verify the schema. If you're using VSCode (or other similar IDEs), including this line will allow for autocomplete and helpful suggestions when writing the study configuration. See examples for more information | [parser/types.ts:1872](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1872) |
-| `additionalDescription?` | `string` | Additional description of the library. It accepts markdown formatting. | [parser/types.ts:1880](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1880) |
-| `baseComponents?` | [`BaseComponents`](../type-aliases/BaseComponents.md) | The base components that are used in the study. These components can be used to template other components. See [BaseComponents](../../type-aliases/BaseComponents) for more information. | [parser/types.ts:1888](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1888) |
-| `components` | `Record`\<`string`, [`IndividualComponent`](../type-aliases/IndividualComponent.md) \| [`InheritedComponent`](../type-aliases/InheritedComponent.md)\> | The components that are used in the study. They must be fully defined here with all properties. Some properties may be inherited from baseComponents. | [parser/types.ts:1876](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1876) |
-| `description` | `string` | A description of the library. | [parser/types.ts:1874](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1874) |
-| `doi?` | `string` | The DOI of the paper where the content of the library is based on. | [parser/types.ts:1884](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1884) |
-| `externalLink?` | `string` | The external link to the paper/website where the content of the library is based on. | [parser/types.ts:1886](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1886) |
-| `reference?` | `string` | The reference to the paper where the content of the library is based on. | [parser/types.ts:1882](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1882) |
-| `sequences` | `Record`\<`string`, [`StudyConfig`](StudyConfig.md)\[`"sequence"`\]\> | The order of the components in the study. This might include some randomness. | [parser/types.ts:1878](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1878) |
+| `$schema` | `string` | A required json schema property. This should point to the github link for the version of the schema you would like. The `$schema` line is used to verify the schema. If you're using VSCode (or other similar IDEs), including this line will allow for autocomplete and helpful suggestions when writing the study configuration. See examples for more information | [parser/types.ts:1878](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1878) |
+| `additionalDescription?` | `string` | Additional description of the library. It accepts markdown formatting. | [parser/types.ts:1886](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1886) |
+| `baseComponents?` | [`BaseComponents`](../type-aliases/BaseComponents.md) | The base components that are used in the study. These components can be used to template other components. See [BaseComponents](../../type-aliases/BaseComponents) for more information. | [parser/types.ts:1894](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1894) |
+| `components` | `Record`\<`string`, [`IndividualComponent`](../type-aliases/IndividualComponent.md) \| [`InheritedComponent`](../type-aliases/InheritedComponent.md)\> | The components that are used in the study. They must be fully defined here with all properties. Some properties may be inherited from baseComponents. | [parser/types.ts:1882](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1882) |
+| `description` | `string` | A description of the library. | [parser/types.ts:1880](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1880) |
+| `doi?` | `string` | The DOI of the paper where the content of the library is based on. | [parser/types.ts:1890](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1890) |
+| `externalLink?` | `string` | The external link to the paper/website where the content of the library is based on. | [parser/types.ts:1892](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1892) |
+| `reference?` | `string` | The reference to the paper where the content of the library is based on. | [parser/types.ts:1888](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1888) |
+| `sequences` | `Record`\<`string`, [`StudyConfig`](StudyConfig.md)\[`"sequence"`\]\> | The order of the components in the study. This might include some randomness. | [parser/types.ts:1884](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1884) |
diff --git a/docs/typedoc/interfaces/LikertResponse.md b/docs/typedoc/interfaces/LikertResponse.md
index 189d233856..5cd6dfdccb 100644
--- a/docs/typedoc/interfaces/LikertResponse.md
+++ b/docs/typedoc/interfaces/LikertResponse.md
@@ -1,6 +1,6 @@
# LikertResponse
-Defined in: [parser/types.ts:490](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L490)
+Defined in: [parser/types.ts:490](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L490)
The LikertResponse interface is used to define the properties of a likert response.
LikertResponses render as radio buttons with a user specified number of options, which can be controlled through the numItems. For example, `"numItems": 5` will render 5 radio buttons, and `"numItems": 7` will render 7 radio buttons.
@@ -32,26 +32,26 @@ Example for a five-point Likert Scale:
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `string` \| `number` | The default value of the response. Specify a rendered option value as a number or string (for example `4` or `"4"`). | - | [parser/types.ts:495](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L495) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L390) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L380) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L362) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L368) |
-| `labelLocation?` | `"above"` \| `"inline"` \| `"below"` | The location of the labels. Defaults to inline. | - | [parser/types.ts:505](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L505) |
-| `leftLabel?` | `string` | The left label of the likert scale. E.g Strongly Disagree | - | [parser/types.ts:501](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L501) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L372) |
-| `numItems` | `number` | The number of options to render. | - | [parser/types.ts:493](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L493) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L378) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L364) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L370) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L376) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L374) |
-| `rightLabel?` | `string` | The right label of the likert scale. E.g Strongly Agree | - | [parser/types.ts:503](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L503) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L366) |
-| `spacing?` | `number` | The spacing between the options. Defaults to 1. | - | [parser/types.ts:499](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L499) |
-| `start?` | `number` | The starting value of the likert scale. Defaults to 1. | - | [parser/types.ts:497](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L497) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L388) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L386) |
-| `type` | `"likert"` | - | - | [parser/types.ts:491](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L491) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L382) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L384) |
+| `default?` | `string` \| `number` | The default value of the response. Specify a rendered option value as a number or string (for example `4` or `"4"`). | - | [parser/types.ts:495](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L495) |
+| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L390) |
+| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L380) |
+| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L362) |
+| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L368) |
+| `labelLocation?` | `"above"` \| `"inline"` \| `"below"` | The location of the labels. Defaults to inline. | - | [parser/types.ts:505](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L505) |
+| `leftLabel?` | `string` | The left label of the likert scale. E.g Strongly Disagree | - | [parser/types.ts:501](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L501) |
+| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L372) |
+| `numItems` | `number` | The number of options to render. | - | [parser/types.ts:493](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L493) |
+| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L378) |
+| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L364) |
+| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L370) |
+| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L376) |
+| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L374) |
+| `rightLabel?` | `string` | The right label of the likert scale. E.g Strongly Agree | - | [parser/types.ts:503](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L503) |
+| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L366) |
+| `spacing?` | `number` | The spacing between the options. Defaults to 1. | - | [parser/types.ts:499](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L499) |
+| `start?` | `number` | The starting value of the likert scale. Defaults to 1. | - | [parser/types.ts:497](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L497) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L388) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L386) |
+| `type` | `"likert"` | - | - | [parser/types.ts:491](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L491) |
+| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L382) |
+| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L384) |
diff --git a/docs/typedoc/interfaces/LongTextResponse.md b/docs/typedoc/interfaces/LongTextResponse.md
index 93001f238d..304d41960d 100644
--- a/docs/typedoc/interfaces/LongTextResponse.md
+++ b/docs/typedoc/interfaces/LongTextResponse.md
@@ -1,6 +1,6 @@
# LongTextResponse
-Defined in: [parser/types.ts:459](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L459)
+Defined in: [parser/types.ts:459](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L459)
The LongTextResponse interface is used to define the properties of a long text response.
LongTextResponses render as a text area that accepts any text and can optionally have a placeholder.
@@ -23,21 +23,21 @@ LongTextResponses render as a text area that accepts any text and can optionally
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `string` | The default value of the response. Specify a string such as `"I enjoyed this study because..."`. | - | [parser/types.ts:464](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L464) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L390) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L380) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L362) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L368) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L372) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L378) |
-| `placeholder?` | `string` | The placeholder text that is displayed in the input. | - | [parser/types.ts:462](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L462) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L364) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L370) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L376) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L374) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L366) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L388) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L386) |
-| `type` | `"longText"` | - | - | [parser/types.ts:460](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L460) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L382) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L384) |
+| `default?` | `string` | The default value of the response. Specify a string such as `"I enjoyed this study because..."`. | - | [parser/types.ts:464](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L464) |
+| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L390) |
+| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L380) |
+| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L362) |
+| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L368) |
+| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L372) |
+| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L378) |
+| `placeholder?` | `string` | The placeholder text that is displayed in the input. | - | [parser/types.ts:462](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L462) |
+| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L364) |
+| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L370) |
+| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L376) |
+| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L374) |
+| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L366) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L388) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L386) |
+| `type` | `"longText"` | - | - | [parser/types.ts:460](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L460) |
+| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L382) |
+| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L384) |
diff --git a/docs/typedoc/interfaces/MarkdownComponent.md b/docs/typedoc/interfaces/MarkdownComponent.md
index 20a89e7c59..93ee803f69 100644
--- a/docs/typedoc/interfaces/MarkdownComponent.md
+++ b/docs/typedoc/interfaces/MarkdownComponent.md
@@ -1,6 +1,6 @@
# MarkdownComponent
-Defined in: [parser/types.ts:1073](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1073)
+Defined in: [parser/types.ts:1079](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1079)
The MarkdownComponent interface is used to define the properties of a markdown component. The components can be used to render many different things, such as consent forms, instructions, and debriefs. Additionally, you can use the markdown component to render images, videos, and other media, with supporting text. Markdown components can have responses (e.g. in a consent form), or no responses (e.g. in a help text file). Here's an example with no responses for a simple help text file:
@@ -20,36 +20,39 @@ The MarkdownComponent interface is used to define the properties of a markdown c
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:1041](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1041) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:1045](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1045) |
-| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1001) |
-| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1005) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1049](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1049) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:1021](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1021) |
-| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:1017](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1017) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:1019](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1019) |
-| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1003) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:1031](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1031) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:1029](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1029) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:1027](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1027) |
-| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:1025](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1025) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:1023](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1023) |
-| `path` | `string` | The path to the markdown file. This should be a relative path from the public folder. | - | [parser/types.ts:1076](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1076) |
-| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:1033](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1033) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:1035](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1035) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:1037](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1037) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:1043](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1043) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:1047](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1047) |
-| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L997) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1051](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1051) |
-| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1055](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1055) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:1013](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1013) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:1015](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1015) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1011) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1059](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1059) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1057](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1057) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:1039](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1039) |
-| `type` | `"markdown"` | - | - | [parser/types.ts:1074](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1074) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1053](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1053) |
-| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1007) |
-| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1009) |
+| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:1047](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1047) |
+| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:1051](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1051) |
+| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1001) |
+| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1005) |
+| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1055](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1055) |
+| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:1021](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1021) |
+| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:1017](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1017) |
+| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:1019](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1019) |
+| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1003) |
+| `nextButtonAutoAdvanceTime?` | `number` | The time in milliseconds after which the participant is automatically advanced to the next component without saving answers from the current component. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceTime`](BaseIndividualComponent.md#nextbuttonautoadvancetime) | [parser/types.ts:1033](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1033) |
+| `nextButtonAutoAdvanceWarningMessage?` | `string` | The warning message shown before auto-advance. Include `{seconds}` to interpolate the remaining number and `{unit}` to interpolate `second`/`seconds`. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceWarningMessage`](BaseIndividualComponent.md#nextbuttonautoadvancewarningmessage) | [parser/types.ts:1037](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1037) |
+| `nextButtonAutoAdvanceWarningTime?` | `number` | The time in milliseconds before auto-advance when the warning message is shown. Defaults to 30000. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceWarningTime`](BaseIndividualComponent.md#nextbuttonautoadvancewarningtime) | [parser/types.ts:1035](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1035) |
+| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:1031](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1031) |
+| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:1029](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1029) |
+| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:1027](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1027) |
+| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:1025](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1025) |
+| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:1023](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1023) |
+| `path` | `string` | The path to the markdown file. This should be a relative path from the public folder. | - | [parser/types.ts:1082](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1082) |
+| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:1039](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1039) |
+| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:1041](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1041) |
+| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:1043](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1043) |
+| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:1049](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1049) |
+| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:1053](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1053) |
+| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L997) |
+| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1057](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1057) |
+| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1061](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1061) |
+| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:1013](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1013) |
+| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:1015](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1015) |
+| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1011) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1065](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1065) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1063](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1063) |
+| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:1045](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1045) |
+| `type` | `"markdown"` | - | - | [parser/types.ts:1080](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1080) |
+| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1059](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1059) |
+| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1007) |
+| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1009) |
diff --git a/docs/typedoc/interfaces/MatrixCheckboxResponse.md b/docs/typedoc/interfaces/MatrixCheckboxResponse.md
index 8bbb1e5746..fca4ce9339 100644
--- a/docs/typedoc/interfaces/MatrixCheckboxResponse.md
+++ b/docs/typedoc/interfaces/MatrixCheckboxResponse.md
@@ -1,6 +1,6 @@
# MatrixCheckboxResponse
-Defined in: [parser/types.ts:584](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L584)
+Defined in: [parser/types.ts:584](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L584)
The MatrixCheckboxResponse interface defines a matrix where each row can select multiple options.
`questionOptions` are rendered as rows, and `answerOptions` are rendered as columns.
@@ -43,23 +43,23 @@ Example using custom columns (`answerOptions`):
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `answerOptions` | `"likely5"` \| `"likely7"` \| `"satisfaction5"` \| `"satisfaction7"` \| (`string` \| [`StringOption`](StringOption.md))[] | The answer options (columns). We provide some shortcuts for a likelihood scale (ranging from highly unlikely to highly likely) and a satisfaction scale (ranging from highly unsatisfied to highly satisfied) with either 5 or 7 options to choose from. | `BaseMatrixResponse.answerOptions` | [parser/types.ts:510](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L510) |
-| `default?` | `Record`\<`string`, `string`[]\> | The default value of the response by question key. Provide an object where each key is a question value and each value is an array of selected answer option values. | - | [parser/types.ts:587](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L587) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | `BaseMatrixResponse.excludeFromRandomization` | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L390) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | `BaseMatrixResponse.hidden` | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L380) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | `BaseMatrixResponse.id` | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L362) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | `BaseMatrixResponse.infoText` | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L368) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | `BaseMatrixResponse.location` | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L372) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | `BaseMatrixResponse.paramCapture` | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L378) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | `BaseMatrixResponse.prompt` | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L364) |
-| `questionOptions` | (`string` \| [`StringOption`](StringOption.md))[] | The question options (rows) are the prompts for each response you'd like to record. | `BaseMatrixResponse.questionOptions` | [parser/types.ts:512](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L512) |
-| `questionOrder?` | `"random"` \| `"fixed"` | The order in which the questions are displayed. Defaults to fixed. | `BaseMatrixResponse.questionOrder` | [parser/types.ts:514](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L514) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | `BaseMatrixResponse.required` | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L370) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | `BaseMatrixResponse.requiredLabel` | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L376) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | `BaseMatrixResponse.requiredValue` | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L374) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | `BaseMatrixResponse.secondaryText` | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L366) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | `BaseMatrixResponse.style` | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L388) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | `BaseMatrixResponse.stylesheetPath` | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L386) |
-| `type` | `"matrix-checkbox"` | - | - | [parser/types.ts:585](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L585) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | `BaseMatrixResponse.withDivider` | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L382) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | `BaseMatrixResponse.withDontKnow` | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L384) |
+| `answerOptions` | `"likely5"` \| `"likely7"` \| `"satisfaction5"` \| `"satisfaction7"` \| (`string` \| [`StringOption`](StringOption.md))[] | The answer options (columns). We provide some shortcuts for a likelihood scale (ranging from highly unlikely to highly likely) and a satisfaction scale (ranging from highly unsatisfied to highly satisfied) with either 5 or 7 options to choose from. | `BaseMatrixResponse.answerOptions` | [parser/types.ts:510](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L510) |
+| `default?` | `Record`\<`string`, `string`[]\> | The default value of the response by question key. Provide an object where each key is a question value and each value is an array of selected answer option values. | - | [parser/types.ts:587](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L587) |
+| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | `BaseMatrixResponse.excludeFromRandomization` | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L390) |
+| `hidden?` | `boolean` | Controls whether the response is hidden. | `BaseMatrixResponse.hidden` | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L380) |
+| `id` | `string` | The id of the response. This is used to identify the response in the data file. | `BaseMatrixResponse.id` | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L362) |
+| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | `BaseMatrixResponse.infoText` | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L368) |
+| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | `BaseMatrixResponse.location` | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L372) |
+| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | `BaseMatrixResponse.paramCapture` | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L378) |
+| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | `BaseMatrixResponse.prompt` | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L364) |
+| `questionOptions` | (`string` \| [`StringOption`](StringOption.md))[] | The question options (rows) are the prompts for each response you'd like to record. | `BaseMatrixResponse.questionOptions` | [parser/types.ts:512](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L512) |
+| `questionOrder?` | `"random"` \| `"fixed"` | The order in which the questions are displayed. Defaults to fixed. | `BaseMatrixResponse.questionOrder` | [parser/types.ts:514](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L514) |
+| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | `BaseMatrixResponse.required` | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L370) |
+| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | `BaseMatrixResponse.requiredLabel` | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L376) |
+| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | `BaseMatrixResponse.requiredValue` | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L374) |
+| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | `BaseMatrixResponse.secondaryText` | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L366) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | `BaseMatrixResponse.style` | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L388) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | `BaseMatrixResponse.stylesheetPath` | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L386) |
+| `type` | `"matrix-checkbox"` | - | - | [parser/types.ts:585](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L585) |
+| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | `BaseMatrixResponse.withDivider` | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L382) |
+| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | `BaseMatrixResponse.withDontKnow` | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L384) |
diff --git a/docs/typedoc/interfaces/MatrixRadioResponse.md b/docs/typedoc/interfaces/MatrixRadioResponse.md
index 5073bb2234..8331a4dc35 100644
--- a/docs/typedoc/interfaces/MatrixRadioResponse.md
+++ b/docs/typedoc/interfaces/MatrixRadioResponse.md
@@ -1,6 +1,6 @@
# MatrixRadioResponse
-Defined in: [parser/types.ts:544](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L544)
+Defined in: [parser/types.ts:544](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L544)
The MatrixRadioResponse interface defines a matrix where each row accepts exactly one selected option.
`questionOptions` are rendered as rows, and `answerOptions` are rendered as columns.
@@ -36,23 +36,23 @@ Example:
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `answerOptions` | `"likely5"` \| `"likely7"` \| `"satisfaction5"` \| `"satisfaction7"` \| (`string` \| [`StringOption`](StringOption.md))[] | The answer options (columns). We provide some shortcuts for a likelihood scale (ranging from highly unlikely to highly likely) and a satisfaction scale (ranging from highly unsatisfied to highly satisfied) with either 5 or 7 options to choose from. | `BaseMatrixResponse.answerOptions` | [parser/types.ts:510](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L510) |
-| `default?` | `Record`\<`string`, `string`\> | The default value of the response by question key. Provide an object where each key is a question value and each value is one answer option value. | - | [parser/types.ts:547](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L547) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | `BaseMatrixResponse.excludeFromRandomization` | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L390) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | `BaseMatrixResponse.hidden` | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L380) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | `BaseMatrixResponse.id` | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L362) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | `BaseMatrixResponse.infoText` | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L368) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | `BaseMatrixResponse.location` | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L372) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | `BaseMatrixResponse.paramCapture` | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L378) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | `BaseMatrixResponse.prompt` | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L364) |
-| `questionOptions` | (`string` \| [`StringOption`](StringOption.md))[] | The question options (rows) are the prompts for each response you'd like to record. | `BaseMatrixResponse.questionOptions` | [parser/types.ts:512](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L512) |
-| `questionOrder?` | `"random"` \| `"fixed"` | The order in which the questions are displayed. Defaults to fixed. | `BaseMatrixResponse.questionOrder` | [parser/types.ts:514](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L514) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | `BaseMatrixResponse.required` | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L370) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | `BaseMatrixResponse.requiredLabel` | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L376) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | `BaseMatrixResponse.requiredValue` | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L374) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | `BaseMatrixResponse.secondaryText` | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L366) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | `BaseMatrixResponse.style` | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L388) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | `BaseMatrixResponse.stylesheetPath` | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L386) |
-| `type` | `"matrix-radio"` | - | - | [parser/types.ts:545](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L545) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | `BaseMatrixResponse.withDivider` | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L382) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | `BaseMatrixResponse.withDontKnow` | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L384) |
+| `answerOptions` | `"likely5"` \| `"likely7"` \| `"satisfaction5"` \| `"satisfaction7"` \| (`string` \| [`StringOption`](StringOption.md))[] | The answer options (columns). We provide some shortcuts for a likelihood scale (ranging from highly unlikely to highly likely) and a satisfaction scale (ranging from highly unsatisfied to highly satisfied) with either 5 or 7 options to choose from. | `BaseMatrixResponse.answerOptions` | [parser/types.ts:510](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L510) |
+| `default?` | `Record`\<`string`, `string`\> | The default value of the response by question key. Provide an object where each key is a question value and each value is one answer option value. | - | [parser/types.ts:547](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L547) |
+| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | `BaseMatrixResponse.excludeFromRandomization` | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L390) |
+| `hidden?` | `boolean` | Controls whether the response is hidden. | `BaseMatrixResponse.hidden` | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L380) |
+| `id` | `string` | The id of the response. This is used to identify the response in the data file. | `BaseMatrixResponse.id` | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L362) |
+| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | `BaseMatrixResponse.infoText` | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L368) |
+| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | `BaseMatrixResponse.location` | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L372) |
+| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | `BaseMatrixResponse.paramCapture` | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L378) |
+| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | `BaseMatrixResponse.prompt` | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L364) |
+| `questionOptions` | (`string` \| [`StringOption`](StringOption.md))[] | The question options (rows) are the prompts for each response you'd like to record. | `BaseMatrixResponse.questionOptions` | [parser/types.ts:512](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L512) |
+| `questionOrder?` | `"random"` \| `"fixed"` | The order in which the questions are displayed. Defaults to fixed. | `BaseMatrixResponse.questionOrder` | [parser/types.ts:514](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L514) |
+| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | `BaseMatrixResponse.required` | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L370) |
+| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | `BaseMatrixResponse.requiredLabel` | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L376) |
+| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | `BaseMatrixResponse.requiredValue` | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L374) |
+| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | `BaseMatrixResponse.secondaryText` | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L366) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | `BaseMatrixResponse.style` | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L388) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | `BaseMatrixResponse.stylesheetPath` | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L386) |
+| `type` | `"matrix-radio"` | - | - | [parser/types.ts:545](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L545) |
+| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | `BaseMatrixResponse.withDivider` | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L382) |
+| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | `BaseMatrixResponse.withDontKnow` | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L384) |
diff --git a/docs/typedoc/interfaces/NumberOption.md b/docs/typedoc/interfaces/NumberOption.md
index 68b60a9a61..2807770108 100644
--- a/docs/typedoc/interfaces/NumberOption.md
+++ b/docs/typedoc/interfaces/NumberOption.md
@@ -1,6 +1,6 @@
# NumberOption
-Defined in: [parser/types.ts:330](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L330)
+Defined in: [parser/types.ts:330](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L330)
The NumberOption interface is used to define the options for a slider response.
The label is the text that is displayed to the user, and the value is the value that is stored in the data file.
@@ -9,5 +9,5 @@ The label is the text that is displayed to the user, and the value is the value
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `label` | `string` | The label displayed to participants. | [parser/types.ts:332](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L332) |
-| `value` | `number` | The value stored in the participant's data. | [parser/types.ts:334](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L334) |
+| `label` | `string` | The label displayed to participants. | [parser/types.ts:332](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L332) |
+| `value` | `number` | The value stored in the participant's data. | [parser/types.ts:334](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L334) |
diff --git a/docs/typedoc/interfaces/NumericalResponse.md b/docs/typedoc/interfaces/NumericalResponse.md
index dfe1e44f27..72e95050c3 100644
--- a/docs/typedoc/interfaces/NumericalResponse.md
+++ b/docs/typedoc/interfaces/NumericalResponse.md
@@ -1,6 +1,6 @@
# NumericalResponse
-Defined in: [parser/types.ts:409](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L409)
+Defined in: [parser/types.ts:409](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L409)
The NumericalResponse interface is used to define the properties of a numerical response.
NumericalResponses render as a text input that only accepts numbers, and can optionally have a min and max value, or a placeholder.
@@ -25,23 +25,23 @@ NumericalResponses render as a text input that only accepts numbers, and can opt
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `number` | The default value of the response. Specify a numeric value such as `25` or `3.14`. | - | [parser/types.ts:414](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L414) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L390) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L380) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L362) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L368) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L372) |
-| `max?` | `number` | The maximum value that is accepted in the input. | - | [parser/types.ts:418](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L418) |
-| `min?` | `number` | The minimum value that is accepted in the input. | - | [parser/types.ts:416](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L416) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L378) |
-| `placeholder?` | `string` | The placeholder text that is displayed in the input. | - | [parser/types.ts:412](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L412) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L364) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L370) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L376) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L374) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L366) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L388) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L386) |
-| `type` | `"numerical"` | - | - | [parser/types.ts:410](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L410) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L382) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L384) |
+| `default?` | `number` | The default value of the response. Specify a numeric value such as `25` or `3.14`. | - | [parser/types.ts:414](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L414) |
+| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L390) |
+| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L380) |
+| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L362) |
+| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L368) |
+| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L372) |
+| `max?` | `number` | The maximum value that is accepted in the input. | - | [parser/types.ts:418](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L418) |
+| `min?` | `number` | The minimum value that is accepted in the input. | - | [parser/types.ts:416](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L416) |
+| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L378) |
+| `placeholder?` | `string` | The placeholder text that is displayed in the input. | - | [parser/types.ts:412](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L412) |
+| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L364) |
+| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L370) |
+| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L376) |
+| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L374) |
+| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L366) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L388) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L386) |
+| `type` | `"numerical"` | - | - | [parser/types.ts:410](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L410) |
+| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L382) |
+| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L384) |
diff --git a/docs/typedoc/interfaces/ParsedStringOption.md b/docs/typedoc/interfaces/ParsedStringOption.md
index b6c5c1fdaf..03dd4b29de 100644
--- a/docs/typedoc/interfaces/ParsedStringOption.md
+++ b/docs/typedoc/interfaces/ParsedStringOption.md
@@ -1,6 +1,6 @@
# ParsedStringOption
-Defined in: [parser/types.ts:351](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L351)
+Defined in: [parser/types.ts:351](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L351)
StringOption normalized to always include a value.
@@ -12,6 +12,6 @@ StringOption normalized to always include a value.
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the option. This does not accept markdown. | [`StringOption`](StringOption.md).[`infoText`](StringOption.md#infotext) | [parser/types.ts:347](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L347) |
-| `label` | `string` | The label displayed to participants. Markdown is supported. | [`StringOption`](StringOption.md).[`label`](StringOption.md#label) | [parser/types.ts:343](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L343) |
-| `value` | `string` | - | - | [parser/types.ts:352](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L352) |
+| `infoText?` | `string` | The description that is displayed when the participant hovers over the option. This does not accept markdown. | [`StringOption`](StringOption.md).[`infoText`](StringOption.md#infotext) | [parser/types.ts:347](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L347) |
+| `label` | `string` | The label displayed to participants. Markdown is supported. | [`StringOption`](StringOption.md).[`label`](StringOption.md#label) | [parser/types.ts:343](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L343) |
+| `value` | `string` | - | - | [parser/types.ts:352](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L352) |
diff --git a/docs/typedoc/interfaces/ParticipantData.md b/docs/typedoc/interfaces/ParticipantData.md
index 1dc309f103..c4b06e65e4 100644
--- a/docs/typedoc/interfaces/ParticipantData.md
+++ b/docs/typedoc/interfaces/ParticipantData.md
@@ -1,6 +1,6 @@
# ParticipantData
-Defined in: [storage/types.ts:49](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L49)
+Defined in: [storage/types.ts:45](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L45)
The ParticipantData is a JSON object that contains all of the data for a single participant in your study. In storage, participant records and configuration records are often collected together in a list, where each element refers either to a participant's data or to a configuration. While in many cases there is only one configuration per study, the study creator is allowed to change the configuration file after the study has already been completed by other participants. The data for each participant will have a `participantConfigHash` which refers to a particular configuration that is also stored in this list.
@@ -31,9 +31,6 @@ Each key in answer will be labeled the same as the response component that it re
},
"startTime": 1711641174858,
"endTime": 1711641178836,
- "provenanceGraph":{
- ...
- },
"windowEvents": [
...
]
@@ -41,9 +38,7 @@ Each key in answer will be labeled the same as the response component that it re
```
The keys of this object are the names of the components with an additional underscore and number appended to the end. This is done so that the study creator can discern between not only the components but also between the various instances of the same component when necessary. All times are in **epoch milliseconds**.
-:::info
-The `"provenanceGraph"` key will only exist if the component is a React component and if it is utilizing Trrack. See [here](../StoredAnswer) for more details.
-:::
+Provenance graphs exported from Trrack are stored separately from the participant answer object, using the same per-participant, per-task asset storage pattern as audio and screen recordings.
We can see at a high level that we are given the answer that the user submitted, the start time for the component, and the end time. In addition to this, we have a list of window events. You can find more information about the StoredAnswer object [here](../StoredAnswer).
@@ -55,15 +50,15 @@ We can see at a high level that we are given the answer that the user submitted,
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `answers` | `Record`\<`string`, [`StoredAnswer`](StoredAnswer.md)\> | Object whose keys are the component names and values are StoredAnswer objects. | [storage/types.ts:59](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L59) |
-| `conditions?` | `string`[] | The study condition(s) the participant was assigned to. Derived from the URL `condition` query parameter. | [storage/types.ts:74](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L74) |
-| `createdTime?` | `number` | Time that the participant registered for the study in epoch milliseconds. | [storage/types.ts:76](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L76) |
-| `metadata` | [`ParticipantMetadata`](ParticipantMetadata.md) | Metadata of a participant's browser, resolution, language, and IP. | [storage/types.ts:63](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L63) |
-| `participantConfigHash` | `string` | Unique ID corresponding to the Configuration that the participant received. | [storage/types.ts:53](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L53) |
-| `participantId` | `string` | Unique ID associated with the participant | [storage/types.ts:51](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L51) |
-| `participantIndex` | `number` | Index of the participant in the study. | [storage/types.ts:57](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L57) |
-| `participantTags` | `string`[] | The component blocks that the participant entered. | [storage/types.ts:70](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L70) |
-| `rejected` | `false` \| \{ `reason`: `string`; `timestamp`: `number`; \} | Whether the participant has been rejected and the reason. | [storage/types.ts:65](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L65) |
-| `searchParams` | `Record`\<`string`, `string`\> | Query parameters of the URL used to enter the study. | [storage/types.ts:61](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L61) |
-| `sequence` | `Sequence` | Sequence of components that the participant received. This is an internal data type and is compiled from the ComponentBlocks in the StudyConfig sequence. | [storage/types.ts:55](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L55) |
-| `stage` | `string` | The stage of the participant in the study. | [storage/types.ts:72](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L72) |
+| `answers` | `Record`\<`string`, [`StoredAnswer`](StoredAnswer.md)\> | Object whose keys are the component names and values are StoredAnswer objects. | [storage/types.ts:55](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L55) |
+| `conditions?` | `string`[] | The study condition(s) the participant was assigned to. Derived from the URL `condition` query parameter. | [storage/types.ts:70](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L70) |
+| `createdTime?` | `number` | Time that the participant registered for the study in epoch milliseconds. | [storage/types.ts:72](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L72) |
+| `metadata` | [`ParticipantMetadata`](ParticipantMetadata.md) | Metadata of a participant's browser, resolution, language, and IP. | [storage/types.ts:59](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L59) |
+| `participantConfigHash` | `string` | Unique ID corresponding to the Configuration that the participant received. | [storage/types.ts:49](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L49) |
+| `participantId` | `string` | Unique ID associated with the participant | [storage/types.ts:47](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L47) |
+| `participantIndex` | `number` | Index of the participant in the study. | [storage/types.ts:53](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L53) |
+| `participantTags` | `string`[] | The component blocks that the participant entered. | [storage/types.ts:66](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L66) |
+| `rejected` | `false` \| \{ `reason`: `string`; `timestamp`: `number`; \} | Whether the participant has been rejected and the reason. | [storage/types.ts:61](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L61) |
+| `searchParams` | `Record`\<`string`, `string`\> | Query parameters of the URL used to enter the study. | [storage/types.ts:57](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L57) |
+| `sequence` | `Sequence` | Sequence of components that the participant received. This is an internal data type and is compiled from the ComponentBlocks in the StudyConfig sequence. | [storage/types.ts:51](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L51) |
+| `stage` | `string` | The stage of the participant in the study. | [storage/types.ts:68](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L68) |
diff --git a/docs/typedoc/interfaces/ParticipantDataWithStatus.md b/docs/typedoc/interfaces/ParticipantDataWithStatus.md
index 5f6f7040b3..8451776c26 100644
--- a/docs/typedoc/interfaces/ParticipantDataWithStatus.md
+++ b/docs/typedoc/interfaces/ParticipantDataWithStatus.md
@@ -1,6 +1,6 @@
# ParticipantDataWithStatus
-Defined in: [storage/types.ts:79](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L79)
+Defined in: [storage/types.ts:75](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L75)
The ParticipantData is a JSON object that contains all of the data for a single participant in your study. In storage, participant records and configuration records are often collected together in a list, where each element refers either to a participant's data or to a configuration. While in many cases there is only one configuration per study, the study creator is allowed to change the configuration file after the study has already been completed by other participants. The data for each participant will have a `participantConfigHash` which refers to a particular configuration that is also stored in this list.
@@ -31,9 +31,6 @@ Each key in answer will be labeled the same as the response component that it re
},
"startTime": 1711641174858,
"endTime": 1711641178836,
- "provenanceGraph":{
- ...
- },
"windowEvents": [
...
]
@@ -41,9 +38,7 @@ Each key in answer will be labeled the same as the response component that it re
```
The keys of this object are the names of the components with an additional underscore and number appended to the end. This is done so that the study creator can discern between not only the components but also between the various instances of the same component when necessary. All times are in **epoch milliseconds**.
-:::info
-The `"provenanceGraph"` key will only exist if the component is a React component and if it is utilizing Trrack. See [here](../StoredAnswer) for more details.
-:::
+Provenance graphs exported from Trrack are stored separately from the participant answer object, using the same per-participant, per-task asset storage pattern as audio and screen recordings.
We can see at a high level that we are given the answer that the user submitted, the start time for the component, and the end time. In addition to this, we have a list of window events. You can find more information about the StoredAnswer object [here](../StoredAnswer).
@@ -55,16 +50,16 @@ We can see at a high level that we are given the answer that the user submitted,
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `answers` | `Record`\<`string`, [`StoredAnswer`](StoredAnswer.md)\> | Object whose keys are the component names and values are StoredAnswer objects. | [`ParticipantData`](ParticipantData.md).[`answers`](ParticipantData.md#answers) | [storage/types.ts:59](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L59) |
-| `completed` | `boolean` | Whether the participant has completed the study. Derived from sequence assignment status. | - | [storage/types.ts:81](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L81) |
-| `conditions?` | `string`[] | The study condition(s) the participant was assigned to. Derived from the URL `condition` query parameter. | [`ParticipantData`](ParticipantData.md).[`conditions`](ParticipantData.md#conditions) | [storage/types.ts:74](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L74) |
-| `createdTime?` | `number` | Time that the participant registered for the study in epoch milliseconds. | [`ParticipantData`](ParticipantData.md).[`createdTime`](ParticipantData.md#createdtime) | [storage/types.ts:76](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L76) |
-| `metadata` | [`ParticipantMetadata`](ParticipantMetadata.md) | Metadata of a participant's browser, resolution, language, and IP. | [`ParticipantData`](ParticipantData.md).[`metadata`](ParticipantData.md#metadata) | [storage/types.ts:63](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L63) |
-| `participantConfigHash` | `string` | Unique ID corresponding to the Configuration that the participant received. | [`ParticipantData`](ParticipantData.md).[`participantConfigHash`](ParticipantData.md#participantconfighash) | [storage/types.ts:53](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L53) |
-| `participantId` | `string` | Unique ID associated with the participant | [`ParticipantData`](ParticipantData.md).[`participantId`](ParticipantData.md#participantid) | [storage/types.ts:51](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L51) |
-| `participantIndex` | `number` | Index of the participant in the study. | [`ParticipantData`](ParticipantData.md).[`participantIndex`](ParticipantData.md#participantindex) | [storage/types.ts:57](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L57) |
-| `participantTags` | `string`[] | The component blocks that the participant entered. | [`ParticipantData`](ParticipantData.md).[`participantTags`](ParticipantData.md#participanttags) | [storage/types.ts:70](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L70) |
-| `rejected` | `false` \| \{ `reason`: `string`; `timestamp`: `number`; \} | Whether the participant has been rejected and the reason. | [`ParticipantData`](ParticipantData.md).[`rejected`](ParticipantData.md#rejected) | [storage/types.ts:65](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L65) |
-| `searchParams` | `Record`\<`string`, `string`\> | Query parameters of the URL used to enter the study. | [`ParticipantData`](ParticipantData.md).[`searchParams`](ParticipantData.md#searchparams) | [storage/types.ts:61](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L61) |
-| `sequence` | `Sequence` | Sequence of components that the participant received. This is an internal data type and is compiled from the ComponentBlocks in the StudyConfig sequence. | [`ParticipantData`](ParticipantData.md).[`sequence`](ParticipantData.md#sequence) | [storage/types.ts:55](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L55) |
-| `stage` | `string` | The stage of the participant in the study. | [`ParticipantData`](ParticipantData.md).[`stage`](ParticipantData.md#stage) | [storage/types.ts:72](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/storage/types.ts#L72) |
+| `answers` | `Record`\<`string`, [`StoredAnswer`](StoredAnswer.md)\> | Object whose keys are the component names and values are StoredAnswer objects. | [`ParticipantData`](ParticipantData.md).[`answers`](ParticipantData.md#answers) | [storage/types.ts:55](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L55) |
+| `completed` | `boolean` | Whether the participant has completed the study. Derived from sequence assignment status. | - | [storage/types.ts:77](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L77) |
+| `conditions?` | `string`[] | The study condition(s) the participant was assigned to. Derived from the URL `condition` query parameter. | [`ParticipantData`](ParticipantData.md).[`conditions`](ParticipantData.md#conditions) | [storage/types.ts:70](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L70) |
+| `createdTime?` | `number` | Time that the participant registered for the study in epoch milliseconds. | [`ParticipantData`](ParticipantData.md).[`createdTime`](ParticipantData.md#createdtime) | [storage/types.ts:72](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L72) |
+| `metadata` | [`ParticipantMetadata`](ParticipantMetadata.md) | Metadata of a participant's browser, resolution, language, and IP. | [`ParticipantData`](ParticipantData.md).[`metadata`](ParticipantData.md#metadata) | [storage/types.ts:59](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L59) |
+| `participantConfigHash` | `string` | Unique ID corresponding to the Configuration that the participant received. | [`ParticipantData`](ParticipantData.md).[`participantConfigHash`](ParticipantData.md#participantconfighash) | [storage/types.ts:49](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L49) |
+| `participantId` | `string` | Unique ID associated with the participant | [`ParticipantData`](ParticipantData.md).[`participantId`](ParticipantData.md#participantid) | [storage/types.ts:47](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L47) |
+| `participantIndex` | `number` | Index of the participant in the study. | [`ParticipantData`](ParticipantData.md).[`participantIndex`](ParticipantData.md#participantindex) | [storage/types.ts:53](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L53) |
+| `participantTags` | `string`[] | The component blocks that the participant entered. | [`ParticipantData`](ParticipantData.md).[`participantTags`](ParticipantData.md#participanttags) | [storage/types.ts:66](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L66) |
+| `rejected` | `false` \| \{ `reason`: `string`; `timestamp`: `number`; \} | Whether the participant has been rejected and the reason. | [`ParticipantData`](ParticipantData.md).[`rejected`](ParticipantData.md#rejected) | [storage/types.ts:61](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L61) |
+| `searchParams` | `Record`\<`string`, `string`\> | Query parameters of the URL used to enter the study. | [`ParticipantData`](ParticipantData.md).[`searchParams`](ParticipantData.md#searchparams) | [storage/types.ts:57](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L57) |
+| `sequence` | `Sequence` | Sequence of components that the participant received. This is an internal data type and is compiled from the ComponentBlocks in the StudyConfig sequence. | [`ParticipantData`](ParticipantData.md).[`sequence`](ParticipantData.md#sequence) | [storage/types.ts:51](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L51) |
+| `stage` | `string` | The stage of the participant in the study. | [`ParticipantData`](ParticipantData.md).[`stage`](ParticipantData.md#stage) | [storage/types.ts:68](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/storage/types.ts#L68) |
diff --git a/docs/typedoc/interfaces/ParticipantMetadata.md b/docs/typedoc/interfaces/ParticipantMetadata.md
index fa5f6a07f9..2d977f8627 100644
--- a/docs/typedoc/interfaces/ParticipantMetadata.md
+++ b/docs/typedoc/interfaces/ParticipantMetadata.md
@@ -1,6 +1,6 @@
# ParticipantMetadata
-Defined in: [store/types.ts:12](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L12)
+Defined in: [store/types.ts:12](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L12)
The ParticipantMetadata object contains metadata about the participant. This includes the user agent, resolution, language, and IP address. This object is used to store information about the participant that is not directly related to the study itself.
@@ -8,7 +8,7 @@ The ParticipantMetadata object contains metadata about the participant. This inc
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `ip` | `string` \| `null` | The IP address of the participant. | [store/types.ts:20](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L20) |
-| `language` | `string` | The language of the participant's browser. | [store/types.ts:18](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L18) |
-| `resolution` | `Record`\<`string`, `string` \| `number`\> | The resolution of the participant's screen. This is an object with two keys, "width" and "height". The values are the width and height of the participant's screen in pixels. | [store/types.ts:16](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L16) |
-| `userAgent` | `string` | The user agent of the participant. This is a string that contains information about the participant's browser and operating system. | [store/types.ts:14](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L14) |
+| `ip` | `string` \| `null` | The IP address of the participant. | [store/types.ts:20](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L20) |
+| `language` | `string` | The language of the participant's browser. | [store/types.ts:18](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L18) |
+| `resolution` | `Record`\<`string`, `string` \| `number`\> | The resolution of the participant's screen. This is an object with two keys, "width" and "height". The values are the width and height of the participant's screen in pixels. | [store/types.ts:16](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L16) |
+| `userAgent` | `string` | The user agent of the participant. This is a string that contains information about the participant's browser and operating system. | [store/types.ts:14](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L14) |
diff --git a/docs/typedoc/interfaces/QuestionnaireComponent.md b/docs/typedoc/interfaces/QuestionnaireComponent.md
index 7faff1925b..0ab6aa7190 100644
--- a/docs/typedoc/interfaces/QuestionnaireComponent.md
+++ b/docs/typedoc/interfaces/QuestionnaireComponent.md
@@ -1,6 +1,6 @@
# QuestionnaireComponent
-Defined in: [parser/types.ts:1232](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1232)
+Defined in: [parser/types.ts:1238](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1238)
A QuestionnaireComponent is used to render simple questions that require a response. The main use case of this component type is to ask participants questions when you don't need to render a stimulus. Please note, that even though we're not using a stimulus, the responses still require a `location`. For example this could be used to collect demographic information from a participant using the following snippet:
@@ -27,35 +27,38 @@ A QuestionnaireComponent is used to render simple questions that require a respo
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:1041](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1041) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:1045](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1045) |
-| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1001) |
-| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1005) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1049](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1049) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:1021](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1021) |
-| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:1017](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1017) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:1019](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1019) |
-| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1003) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:1031](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1031) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:1029](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1029) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:1027](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1027) |
-| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:1025](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1025) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:1023](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1023) |
-| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:1033](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1033) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:1035](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1035) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:1037](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1037) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:1043](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1043) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:1047](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1047) |
-| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L997) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1051](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1051) |
-| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1055](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1055) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:1013](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1013) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:1015](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1015) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1011) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1059](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1059) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1057](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1057) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:1039](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1039) |
-| `type` | `"questionnaire"` | - | - | [parser/types.ts:1233](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1233) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1053](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1053) |
-| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1007) |
-| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1009) |
+| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:1047](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1047) |
+| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:1051](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1051) |
+| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1001) |
+| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1005) |
+| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1055](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1055) |
+| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:1021](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1021) |
+| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:1017](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1017) |
+| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:1019](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1019) |
+| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1003) |
+| `nextButtonAutoAdvanceTime?` | `number` | The time in milliseconds after which the participant is automatically advanced to the next component without saving answers from the current component. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceTime`](BaseIndividualComponent.md#nextbuttonautoadvancetime) | [parser/types.ts:1033](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1033) |
+| `nextButtonAutoAdvanceWarningMessage?` | `string` | The warning message shown before auto-advance. Include `{seconds}` to interpolate the remaining number and `{unit}` to interpolate `second`/`seconds`. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceWarningMessage`](BaseIndividualComponent.md#nextbuttonautoadvancewarningmessage) | [parser/types.ts:1037](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1037) |
+| `nextButtonAutoAdvanceWarningTime?` | `number` | The time in milliseconds before auto-advance when the warning message is shown. Defaults to 30000. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceWarningTime`](BaseIndividualComponent.md#nextbuttonautoadvancewarningtime) | [parser/types.ts:1035](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1035) |
+| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:1031](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1031) |
+| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:1029](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1029) |
+| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:1027](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1027) |
+| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:1025](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1025) |
+| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:1023](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1023) |
+| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:1039](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1039) |
+| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:1041](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1041) |
+| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:1043](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1043) |
+| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:1049](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1049) |
+| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:1053](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1053) |
+| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L997) |
+| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1057](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1057) |
+| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1061](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1061) |
+| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:1013](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1013) |
+| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:1015](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1015) |
+| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1011) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1065](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1065) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1063](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1063) |
+| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:1045](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1045) |
+| `type` | `"questionnaire"` | - | - | [parser/types.ts:1239](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1239) |
+| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1059](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1059) |
+| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1007) |
+| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1009) |
diff --git a/docs/typedoc/interfaces/RadioResponse.md b/docs/typedoc/interfaces/RadioResponse.md
index 1dcf950d14..af5a17f4ea 100644
--- a/docs/typedoc/interfaces/RadioResponse.md
+++ b/docs/typedoc/interfaces/RadioResponse.md
@@ -1,6 +1,6 @@
# RadioResponse
-Defined in: [parser/types.ts:706](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L706)
+Defined in: [parser/types.ts:706](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L706)
The RadioResponse interface is used to define the properties of a radio response. Radios have only one allowable selection.
RadioResponses render as a radio input with user specified options, and optionally left and right labels.
@@ -29,27 +29,27 @@ RadioResponses render as a radio input with user specified options, and optional
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `string` | The default value of the response. Specify one option value as a string. | - | [parser/types.ts:711](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L711) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L390) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L380) |
-| `horizontal?` | `boolean` | Whether to render the radio buttons horizontally. Defaults to false, so they render horizontally. | - | [parser/types.ts:721](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L721) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L362) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L368) |
-| `labelLocation?` | `"above"` \| `"inline"` \| `"below"` | The location of the labels. This only works when horizontal is true. Defaults to inline. | - | [parser/types.ts:719](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L719) |
-| `leftLabel?` | `string` | The left label of the radio group. Used in Likert scales for example | - | [parser/types.ts:715](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L715) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L372) |
-| `optionOrder?` | `"random"` \| `"fixed"` | The order in which the radio buttons are displayed. Defaults to fixed. | - | [parser/types.ts:713](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L713) |
-| `options` | (`string` \| [`StringOption`](StringOption.md))[] | The options that are displayed as checkboxes, provided as an array of objects, with label and value fields. | - | [parser/types.ts:709](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L709) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L378) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L364) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L370) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L376) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L374) |
-| `rightLabel?` | `string` | The right label of the radio group. Used in Likert scales for example | - | [parser/types.ts:717](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L717) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L366) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L388) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L386) |
-| `type` | `"radio"` | - | - | [parser/types.ts:707](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L707) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L382) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L384) |
-| `withOther?` | `boolean` | Whether to render the radios with an "other" option. | - | [parser/types.ts:723](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L723) |
+| `default?` | `string` | The default value of the response. Specify one option value as a string. | - | [parser/types.ts:711](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L711) |
+| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L390) |
+| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L380) |
+| `horizontal?` | `boolean` | Whether to render the radio buttons horizontally. Defaults to false, so they render horizontally. | - | [parser/types.ts:721](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L721) |
+| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L362) |
+| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L368) |
+| `labelLocation?` | `"above"` \| `"inline"` \| `"below"` | The location of the labels. This only works when horizontal is true. Defaults to inline. | - | [parser/types.ts:719](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L719) |
+| `leftLabel?` | `string` | The left label of the radio group. Used in Likert scales for example | - | [parser/types.ts:715](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L715) |
+| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L372) |
+| `optionOrder?` | `"random"` \| `"fixed"` | The order in which the radio buttons are displayed. Defaults to fixed. | - | [parser/types.ts:713](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L713) |
+| `options` | (`string` \| [`StringOption`](StringOption.md))[] | The options that are displayed as checkboxes, provided as an array of objects, with label and value fields. | - | [parser/types.ts:709](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L709) |
+| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L378) |
+| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L364) |
+| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L370) |
+| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L376) |
+| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L374) |
+| `rightLabel?` | `string` | The right label of the radio group. Used in Likert scales for example | - | [parser/types.ts:717](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L717) |
+| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L366) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L388) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L386) |
+| `type` | `"radio"` | - | - | [parser/types.ts:707](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L707) |
+| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L382) |
+| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L384) |
+| `withOther?` | `boolean` | Whether to render the radios with an "other" option. | - | [parser/types.ts:723](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L723) |
diff --git a/docs/typedoc/interfaces/RandomInterruption.md b/docs/typedoc/interfaces/RandomInterruption.md
index d00744762a..73ae5346fa 100644
--- a/docs/typedoc/interfaces/RandomInterruption.md
+++ b/docs/typedoc/interfaces/RandomInterruption.md
@@ -1,6 +1,6 @@
# RandomInterruption
-Defined in: [parser/types.ts:1437](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1437)
+Defined in: [parser/types.ts:1443](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1443)
The RandomInterruption interface is used to define an interruption that will be shown randomly in the block.
@@ -49,6 +49,6 @@ The resulting sequence array could be:
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `components` | `string`[] | The components that are included in the interruption. These reference components in the StudyConfig.components section of the config. | [parser/types.ts:1443](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1443) |
-| `numInterruptions` | `number` | The number of times the interruption will be randomly added | [parser/types.ts:1441](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1441) |
-| `spacing` | `"random"` | If spacing is set to random, reVISit will add interruptions randomly. These interruptions will not ever be displayed as the first component in the block. | [parser/types.ts:1439](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1439) |
+| `components` | `string`[] | The components that are included in the interruption. These reference components in the StudyConfig.components section of the config. | [parser/types.ts:1449](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1449) |
+| `numInterruptions` | `number` | The number of times the interruption will be randomly added | [parser/types.ts:1447](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1447) |
+| `spacing` | `"random"` | If spacing is set to random, reVISit will add interruptions randomly. These interruptions will not ever be displayed as the first component in the block. | [parser/types.ts:1445](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1445) |
diff --git a/docs/typedoc/interfaces/RankingResponse.md b/docs/typedoc/interfaces/RankingResponse.md
index 7d3c42f630..0e0d251c9f 100644
--- a/docs/typedoc/interfaces/RankingResponse.md
+++ b/docs/typedoc/interfaces/RankingResponse.md
@@ -1,6 +1,6 @@
# RankingResponse
-Defined in: [parser/types.ts:796](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L796)
+Defined in: [parser/types.ts:796](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L796)
The RankingResponse interface is used to define the properties of a ranking widget response.
RankingResponses render as a ranking widget with user specified options.
@@ -46,22 +46,22 @@ Ranking Pairwise: The participant is asked to rank items by comparing them in pa
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `Record`\<`string`, `string`\> | The default value of the response. Provide an object keyed by option value. Values depend on ranking type: index strings for sublist (e.g. `"0"`), category labels for categorical (`"HIGH"`, `"MEDIUM"`, `"LOW"`), and pairwise slots (`"pair--high"` / `"pair--low"`). | - | [parser/types.ts:801](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L801) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L390) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L380) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L362) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L368) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L372) |
-| `numItems?` | `number` | The number of items to rank. Applies only to sublist and categorical ranking widgets. | - | [parser/types.ts:803](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L803) |
-| `options` | (`string` \| [`StringOption`](StringOption.md))[] | The options that are displayed as ranking options, provided as an array of objects, with label and value fields. | - | [parser/types.ts:799](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L799) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L378) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L364) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L370) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L376) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L374) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L366) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L388) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L386) |
-| `type` | `"ranking-sublist"` \| `"ranking-categorical"` \| `"ranking-pairwise"` | - | - | [parser/types.ts:797](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L797) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L382) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L384) |
+| `default?` | `Record`\<`string`, `string`\> | The default value of the response. Provide an object keyed by option value. Values depend on ranking type: index strings for sublist (e.g. `"0"`), category labels for categorical (`"HIGH"`, `"MEDIUM"`, `"LOW"`), and pairwise slots (`"pair--high"` / `"pair--low"`). | - | [parser/types.ts:801](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L801) |
+| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L390) |
+| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L380) |
+| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L362) |
+| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L368) |
+| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L372) |
+| `numItems?` | `number` | The number of items to rank. Applies only to sublist and categorical ranking widgets. | - | [parser/types.ts:803](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L803) |
+| `options` | (`string` \| [`StringOption`](StringOption.md))[] | The options that are displayed as ranking options, provided as an array of objects, with label and value fields. | - | [parser/types.ts:799](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L799) |
+| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L378) |
+| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L364) |
+| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L370) |
+| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L376) |
+| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L374) |
+| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L366) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L388) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L386) |
+| `type` | `"ranking-sublist"` \| `"ranking-categorical"` \| `"ranking-pairwise"` | - | - | [parser/types.ts:797](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L797) |
+| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L382) |
+| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L384) |
diff --git a/docs/typedoc/interfaces/ReactComponent.md b/docs/typedoc/interfaces/ReactComponent.md
index f2919a85e3..c2a486077c 100644
--- a/docs/typedoc/interfaces/ReactComponent.md
+++ b/docs/typedoc/interfaces/ReactComponent.md
@@ -1,6 +1,6 @@
# ReactComponent
-Defined in: [parser/types.ts:1122](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1122)
+Defined in: [parser/types.ts:1128](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1128)
The ReactComponent interface is used to define the properties of a react component. This component is used to render react code with certain parameters. These parameters can be used within your react code to render different things.
@@ -41,8 +41,8 @@ export default function CoolComponent({ parameters, setAnswer }: StimulusParams<
```
For in depth examples, see the following studies, and their associated codebases.
-https://revisit.dev/study/demo-react-trrack (https://github.com/revisit-studies/study/tree/v2.4.2/src/public/demo-react-trrack/assets)
-https://revisit.dev/study/example-brush-interactions (https://github.com/revisit-studies/study/tree/v2.4.2/src/public/example-brush-interactions/assets)
+https://revisit.dev/study/demo-react-trrack (https://github.com/revisit-studies/study/tree/v2.4.3/src/public/demo-react-trrack/assets)
+https://revisit.dev/study/example-brush-interactions (https://github.com/revisit-studies/study/tree/v2.4.3/src/public/example-brush-interactions/assets)
## Extends
@@ -52,37 +52,40 @@ https://revisit.dev/study/example-brush-interactions (https://github.com/revisit
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:1041](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1041) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:1045](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1045) |
-| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1001) |
-| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1005) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1049](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1049) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:1021](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1021) |
-| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:1017](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1017) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:1019](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1019) |
-| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1003) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:1031](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1031) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:1029](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1029) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:1027](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1027) |
-| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:1025](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1025) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:1023](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1023) |
-| `parameters?` | `Record`\<`string`, `unknown`\> | The parameters that are passed to the react component. These can be used within your react component to render different things. | - | [parser/types.ts:1127](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1127) |
-| `path` | `string` | The path to the react component. This should be a relative path from the src/public folder. | - | [parser/types.ts:1125](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1125) |
-| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:1033](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1033) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:1035](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1035) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:1037](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1037) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:1043](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1043) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:1047](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1047) |
-| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L997) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1051](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1051) |
-| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1055](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1055) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:1013](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1013) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:1015](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1015) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1011) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1059](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1059) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1057](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1057) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:1039](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1039) |
-| `type` | `"react-component"` | - | - | [parser/types.ts:1123](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1123) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1053](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1053) |
-| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1007) |
-| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1009) |
+| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:1047](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1047) |
+| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:1051](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1051) |
+| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1001) |
+| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1005) |
+| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1055](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1055) |
+| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:1021](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1021) |
+| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:1017](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1017) |
+| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:1019](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1019) |
+| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1003) |
+| `nextButtonAutoAdvanceTime?` | `number` | The time in milliseconds after which the participant is automatically advanced to the next component without saving answers from the current component. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceTime`](BaseIndividualComponent.md#nextbuttonautoadvancetime) | [parser/types.ts:1033](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1033) |
+| `nextButtonAutoAdvanceWarningMessage?` | `string` | The warning message shown before auto-advance. Include `{seconds}` to interpolate the remaining number and `{unit}` to interpolate `second`/`seconds`. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceWarningMessage`](BaseIndividualComponent.md#nextbuttonautoadvancewarningmessage) | [parser/types.ts:1037](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1037) |
+| `nextButtonAutoAdvanceWarningTime?` | `number` | The time in milliseconds before auto-advance when the warning message is shown. Defaults to 30000. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceWarningTime`](BaseIndividualComponent.md#nextbuttonautoadvancewarningtime) | [parser/types.ts:1035](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1035) |
+| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:1031](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1031) |
+| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:1029](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1029) |
+| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:1027](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1027) |
+| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:1025](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1025) |
+| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:1023](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1023) |
+| `parameters?` | `Record`\<`string`, `unknown`\> | The parameters that are passed to the react component. These can be used within your react component to render different things. | - | [parser/types.ts:1133](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1133) |
+| `path` | `string` | The path to the react component. This should be a relative path from the src/public folder. | - | [parser/types.ts:1131](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1131) |
+| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:1039](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1039) |
+| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:1041](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1041) |
+| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:1043](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1043) |
+| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:1049](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1049) |
+| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:1053](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1053) |
+| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L997) |
+| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1057](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1057) |
+| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1061](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1061) |
+| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:1013](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1013) |
+| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:1015](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1015) |
+| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1011) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1065](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1065) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1063](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1063) |
+| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:1045](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1045) |
+| `type` | `"react-component"` | - | - | [parser/types.ts:1129](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1129) |
+| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1059](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1059) |
+| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1007) |
+| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1009) |
diff --git a/docs/typedoc/interfaces/ReactiveResponse.md b/docs/typedoc/interfaces/ReactiveResponse.md
index 5b0c7bc0e4..9f38620df3 100644
--- a/docs/typedoc/interfaces/ReactiveResponse.md
+++ b/docs/typedoc/interfaces/ReactiveResponse.md
@@ -1,6 +1,6 @@
# ReactiveResponse
-Defined in: [parser/types.ts:818](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L818)
+Defined in: [parser/types.ts:818](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L818)
The ReactiveResponse interface is used to define the properties of a reactive response.
ReactiveResponses render as a list, that is connected to a WebsiteComponent, VegaComponent, or ReactComponent. When data is sent from the components, it is displayed in the list.
@@ -21,19 +21,19 @@ ReactiveResponses render as a list, that is connected to a WebsiteComponent, Veg
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L390) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L380) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L362) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L368) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L372) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L378) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L364) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L370) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L376) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L374) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L366) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L388) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L386) |
-| `type` | `"reactive"` | - | - | [parser/types.ts:819](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L819) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L382) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L384) |
+| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L390) |
+| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L380) |
+| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L362) |
+| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L368) |
+| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L372) |
+| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L378) |
+| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L364) |
+| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L370) |
+| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L376) |
+| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L374) |
+| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L366) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L388) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L386) |
+| `type` | `"reactive"` | - | - | [parser/types.ts:819](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L819) |
+| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L382) |
+| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L384) |
diff --git a/docs/typedoc/interfaces/RepeatedComponentBlockCondition.md b/docs/typedoc/interfaces/RepeatedComponentBlockCondition.md
index ff4f055ccd..316dc59fb7 100644
--- a/docs/typedoc/interfaces/RepeatedComponentBlockCondition.md
+++ b/docs/typedoc/interfaces/RepeatedComponentBlockCondition.md
@@ -1,6 +1,6 @@
# RepeatedComponentBlockCondition
-Defined in: [parser/types.ts:1582](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1582)
+Defined in: [parser/types.ts:1588](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1588)
The RepeatedComponentBlockCondition interface is used to define a SkipCondition based on the number of correct or incorrect repeated components. You might use this if you need to check if an attention check was failed multiple times. This is similar to the [ComponentBlockCondition](../ComponentBlockCondition), but it only checks a specific repeated component.
@@ -28,8 +28,8 @@ In this example, when the number of incorrect responses to the repeated componen
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `check` | `"repeatedComponent"` | The check we'll perform. | [parser/types.ts:1586](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1586) |
-| `condition` | `"numCorrect"` \| `"numIncorrect"` | The condition to check. | [parser/types.ts:1588](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1588) |
-| `name` | `string` | The name of the repeated component to check (e.g. attentionCheck). | [parser/types.ts:1584](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1584) |
-| `to` | `string` | The id of the component or block to skip to | [parser/types.ts:1592](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1592) |
-| `value` | `number` | The number of correct or incorrect responses to check for. | [parser/types.ts:1590](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1590) |
+| `check` | `"repeatedComponent"` | The check we'll perform. | [parser/types.ts:1592](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1592) |
+| `condition` | `"numCorrect"` \| `"numIncorrect"` | The condition to check. | [parser/types.ts:1594](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1594) |
+| `name` | `string` | The name of the repeated component to check (e.g. attentionCheck). | [parser/types.ts:1590](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1590) |
+| `to` | `string` | The id of the component or block to skip to | [parser/types.ts:1598](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1598) |
+| `value` | `number` | The number of correct or incorrect responses to check for. | [parser/types.ts:1596](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1596) |
diff --git a/docs/typedoc/interfaces/ShortTextResponse.md b/docs/typedoc/interfaces/ShortTextResponse.md
index b4bcbd867e..066ffafbcd 100644
--- a/docs/typedoc/interfaces/ShortTextResponse.md
+++ b/docs/typedoc/interfaces/ShortTextResponse.md
@@ -1,6 +1,6 @@
# ShortTextResponse
-Defined in: [parser/types.ts:436](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L436)
+Defined in: [parser/types.ts:436](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L436)
The ShortTextResponse interface is used to define the properties of a short text response.
ShortTextResponses render as a text input that accepts any text and can optionally have a placeholder.
@@ -23,21 +23,21 @@ ShortTextResponses render as a text input that accepts any text and can optional
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `string` | The default value of the response. Specify a string such as `"Jane Doe"`. | - | [parser/types.ts:441](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L441) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L390) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L380) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L362) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L368) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L372) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L378) |
-| `placeholder?` | `string` | The placeholder text that is displayed in the input. | - | [parser/types.ts:439](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L439) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L364) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L370) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L376) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L374) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L366) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L388) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L386) |
-| `type` | `"shortText"` | - | - | [parser/types.ts:437](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L437) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L382) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L384) |
+| `default?` | `string` | The default value of the response. Specify a string such as `"Jane Doe"`. | - | [parser/types.ts:441](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L441) |
+| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L390) |
+| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L380) |
+| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L362) |
+| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L368) |
+| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L372) |
+| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L378) |
+| `placeholder?` | `string` | The placeholder text that is displayed in the input. | - | [parser/types.ts:439](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L439) |
+| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L364) |
+| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L370) |
+| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L376) |
+| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L374) |
+| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L366) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L388) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L386) |
+| `type` | `"shortText"` | - | - | [parser/types.ts:437](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L437) |
+| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L382) |
+| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L384) |
diff --git a/docs/typedoc/interfaces/SliderResponse.md b/docs/typedoc/interfaces/SliderResponse.md
index 110eb5cb39..88b2f9f622 100644
--- a/docs/typedoc/interfaces/SliderResponse.md
+++ b/docs/typedoc/interfaces/SliderResponse.md
@@ -1,6 +1,6 @@
# SliderResponse
-Defined in: [parser/types.ts:664](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L664)
+Defined in: [parser/types.ts:664](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L664)
The SliderResponse interface is used to define the properties of a slider response.
SliderResponses render as a slider input with user specified steps. For example, you could have steps of 0, 50, and 100.
@@ -36,28 +36,28 @@ SliderResponses render as a slider input with user specified steps. For example,
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `number` | The default value of the response. Specify a numeric value that falls within the slider range. | - | [parser/types.ts:669](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L669) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L390) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L380) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L362) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L368) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L372) |
-| `options` | [`NumberOption`](NumberOption.md)[] | This defines the steps in the slider and the extent of the slider as an array of objects that have a label and a value. | - | [parser/types.ts:667](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L667) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L378) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L364) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L370) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L376) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L374) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L366) |
-| `smeqStyle?` | `boolean` | Whether to render the slider with a SMEQ style. Defaults to false. | - | [parser/types.ts:683](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L683) |
-| `snap?` | `boolean` | Whether the slider should snap between values. Defaults to false. Slider snapping disables the label above the handle. | - | [parser/types.ts:673](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L673) |
-| `spacing?` | `number` | The spacing between the ticks. If not provided, the spacing is the largest power of 10 smaller than the slider range. | - | [parser/types.ts:677](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L677) |
-| `startingValue?` | `number` | The starting value of the slider. Defaults to the minimum value. | - | [parser/types.ts:671](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L671) |
-| `step?` | `number` | The step value of the slider. If not provided (and snap not enabled), the step value is calculated as the range of the slider divided by 100. | - | [parser/types.ts:675](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L675) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L388) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L386) |
-| `tlxStyle?` | `boolean` | Whether to render the slider with a NASA-tlx style. Defaults to false. | - | [parser/types.ts:681](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L681) |
-| `type` | `"slider"` | - | - | [parser/types.ts:665](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L665) |
-| `withBar?` | `boolean` | Whether to render the slider with a bar to the left. Defaults to true. | - | [parser/types.ts:679](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L679) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L382) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L384) |
+| `default?` | `number` | The default value of the response. Specify a numeric value that falls within the slider range. | - | [parser/types.ts:669](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L669) |
+| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L390) |
+| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:380](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L380) |
+| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L362) |
+| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L368) |
+| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L372) |
+| `options` | [`NumberOption`](NumberOption.md)[] | This defines the steps in the slider and the extent of the slider as an array of objects that have a label and a value. | - | [parser/types.ts:667](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L667) |
+| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:378](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L378) |
+| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:364](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L364) |
+| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:370](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L370) |
+| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:376](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L376) |
+| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:374](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L374) |
+| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:366](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L366) |
+| `smeqStyle?` | `boolean` | Whether to render the slider with a SMEQ style. Defaults to false. | - | [parser/types.ts:683](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L683) |
+| `snap?` | `boolean` | Whether the slider should snap between values. Defaults to false. Slider snapping disables the label above the handle. | - | [parser/types.ts:673](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L673) |
+| `spacing?` | `number` | The spacing between the ticks. If not provided, the spacing is the largest power of 10 smaller than the slider range. | - | [parser/types.ts:677](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L677) |
+| `startingValue?` | `number` | The starting value of the slider. Defaults to the minimum value. | - | [parser/types.ts:671](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L671) |
+| `step?` | `number` | The step value of the slider. If not provided (and snap not enabled), the step value is calculated as the range of the slider divided by 100. | - | [parser/types.ts:675](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L675) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L388) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L386) |
+| `tlxStyle?` | `boolean` | Whether to render the slider with a NASA-tlx style. Defaults to false. | - | [parser/types.ts:681](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L681) |
+| `type` | `"slider"` | - | - | [parser/types.ts:665](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L665) |
+| `withBar?` | `boolean` | Whether to render the slider with a bar to the left. Defaults to true. | - | [parser/types.ts:679](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L679) |
+| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L382) |
+| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:384](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L384) |
diff --git a/docs/typedoc/interfaces/StoredAnswer.md b/docs/typedoc/interfaces/StoredAnswer.md
index b92c74a7b9..45fa49743b 100644
--- a/docs/typedoc/interfaces/StoredAnswer.md
+++ b/docs/typedoc/interfaces/StoredAnswer.md
@@ -1,6 +1,6 @@
# StoredAnswer
-Defined in: [store/types.ts:71](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L71)
+Defined in: [store/types.ts:72](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L72)
The StoredAnswer object is a data structure describing the participant's interaction with an individual component. It is the data structure used as values of the `answers` object of [ParticipantData](../ParticipantData). The general structure for this is below:
@@ -26,19 +26,18 @@ Each item in the window event is given a time, a position an event name, and som
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `answer` | `Record`\<`string`, [`JsonValue`](../type-aliases/JsonValue.md)\> | Object whose keys are the "id"s in the Response list of the component in the StudyConfig and whose value is the inputted value from the participant. | [store/types.ts:73](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L73) |
-| `componentName` | `string` | - | [store/types.ts:75](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L75) |
-| `correctAnswer` | [`Answer`](Answer.md)[] | The correct answer for the component. | [store/types.ts:125](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L125) |
-| `endTime` | `number` | Time that the user ended interaction with the component in epoch milliseconds. | [store/types.ts:83](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L83) |
-| `formOrder?` | `Record`\<`string`, `string`[]\> | The order of the form elements in a base response. | [store/types.ts:131](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L131) |
-| `helpButtonClickedCount` | `number` | A counter indicating how many times participants opened the help tab during a task. Clicking help, or accessing the tab via answer feedback on an incorrect answer both are included in the counter. | [store/types.ts:121](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L121) |
-| `identifier` | `string` | - | [store/types.ts:74](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L74) |
-| `incorrectAnswers` | `Record`\<`string`, \{ `id`: `string`; `value`: `unknown`[]; \}\> | Object whose keys are the "id"s in the Response list of the component in the StudyConfig and whose value is a list of incorrect inputted values from the participant. Only relevant for trials with `provideFeedback` and correct answers enabled. | [store/types.ts:79](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L79) |
-| `optionOrders` | `Record`\<`string`, [`ParsedStringOption`](ParsedStringOption.md)[]\> | The order of question options in the component. | [store/types.ts:127](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L127) |
-| `parameters` | `Record`\<`string`, `any`\> | The parameters that were passed to the component. | [store/types.ts:123](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L123) |
-| `provenanceGraph` | `Record`\<`ResponseBlockLocation`, `TrrackedProvenance` \| `undefined`\> | The entire provenance graph exported from a Trrack instance from a React component. This will only be present if you are using React components and you're utilizing [Trrack](https://apps.vdl.sci.utah.edu/trrack) | [store/types.ts:85](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L85) |
-| `questionOrders` | `Record`\<`string`, `string`[]\> | The order of the questions in a matrix component. | [store/types.ts:129](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L129) |
-| `startTime` | `number` | Time that the user began interacting with the component in epoch milliseconds. | [store/types.ts:81](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L81) |
-| `timedOut` | `boolean` | A boolean value that indicates whether the participant timed out on this question. | [store/types.ts:119](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L119) |
-| `trialOrder` | `string` | The order of the trial in the sequence. | [store/types.ts:77](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L77) |
-| `windowEvents` | `EventType`[] | A list containing the time (in epoch milliseconds), the action (focus, input, keypress, mousedown, mouseup, mousemove, resize, scroll or visibility), and then either a coordinate pertaining to where the event took place on the screen or string related to such event. Below is an example of the windowEvents list. `"windowEvents": [ [ 1711641174878, "mousedown", [ 1843, 286 ] ], [ 1711641174878, "focus", "BUTTON" ], [ 1711641174935, "mouseup", [ 1843, 286 ] ], . . . [ 1711641178706, "mousemove", [ 1868, 728 ] ] ]` | [store/types.ts:117](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/store/types.ts#L117) |
+| `answer` | `Record`\<`string`, [`JsonValue`](../type-aliases/JsonValue.md)\> | Object whose keys are the "id"s in the Response list of the component in the StudyConfig and whose value is the inputted value from the participant. | [store/types.ts:74](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L74) |
+| `componentName` | `string` | - | [store/types.ts:76](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L76) |
+| `correctAnswer` | [`Answer`](Answer.md)[] | The correct answer for the component. | [store/types.ts:124](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L124) |
+| `endTime` | `number` | Time that the user ended interaction with the component in epoch milliseconds. | [store/types.ts:84](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L84) |
+| `formOrder?` | `Record`\<`string`, `string`[]\> | The order of the form elements in a base response. | [store/types.ts:130](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L130) |
+| `helpButtonClickedCount` | `number` | A counter indicating how many times participants opened the help tab during a task. Clicking help, or accessing the tab via answer feedback on an incorrect answer both are included in the counter. | [store/types.ts:120](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L120) |
+| `identifier` | `string` | - | [store/types.ts:75](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L75) |
+| `incorrectAnswers` | `Record`\<`string`, \{ `id`: `string`; `value`: `unknown`[]; \}\> | Object whose keys are the "id"s in the Response list of the component in the StudyConfig and whose value is a list of incorrect inputted values from the participant. Only relevant for trials with `provideFeedback` and correct answers enabled. | [store/types.ts:80](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L80) |
+| `optionOrders` | `Record`\<`string`, [`ParsedStringOption`](ParsedStringOption.md)[]\> | The order of question options in the component. | [store/types.ts:126](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L126) |
+| `parameters` | `Record`\<`string`, `any`\> | The parameters that were passed to the component. | [store/types.ts:122](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L122) |
+| `questionOrders` | `Record`\<`string`, `string`[]\> | The order of the questions in a matrix component. | [store/types.ts:128](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L128) |
+| `startTime` | `number` | Time that the user began interacting with the component in epoch milliseconds. | [store/types.ts:82](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L82) |
+| `timedOut` | `boolean` | A boolean value that indicates whether the participant timed out on this question. | [store/types.ts:118](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L118) |
+| `trialOrder` | `string` | The order of the trial in the sequence. | [store/types.ts:78](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L78) |
+| `windowEvents` | `EventType`[] | A list containing the time (in epoch milliseconds), the action (focus, input, keypress, mousedown, mouseup, mousemove, resize, scroll or visibility), and then either a coordinate pertaining to where the event took place on the screen or string related to such event. Below is an example of the windowEvents list. `"windowEvents": [ [ 1711641174878, "mousedown", [ 1843, 286 ] ], [ 1711641174878, "focus", "BUTTON" ], [ 1711641174935, "mouseup", [ 1843, 286 ] ], . . . [ 1711641178706, "mousemove", [ 1868, 728 ] ] ]` | [store/types.ts:116](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/store/types.ts#L116) |
diff --git a/docs/typedoc/interfaces/StringOption.md b/docs/typedoc/interfaces/StringOption.md
index a71a7667e2..5bee3344c6 100644
--- a/docs/typedoc/interfaces/StringOption.md
+++ b/docs/typedoc/interfaces/StringOption.md
@@ -1,6 +1,6 @@
# StringOption
-Defined in: [parser/types.ts:341](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L341)
+Defined in: [parser/types.ts:341](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L341)
The StringOption interface is used to define the options for a dropdown, radio, buttons, checkbox, matrix, and ranking response.
The label is the text that is displayed to the user, and the value is the value that is stored in the data file.
@@ -9,6 +9,6 @@ The label is the text that is displayed to the user, and the value is the value
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the option. This does not accept markdown. | [parser/types.ts:347](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L347) |
-| `label` | `string` | The label displayed to participants. Markdown is supported. | [parser/types.ts:343](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L343) |
-| `value?` | `string` | The value stored in the participant's data. Defaults to label. | [parser/types.ts:345](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L345) |
+| `infoText?` | `string` | The description that is displayed when the participant hovers over the option. This does not accept markdown. | [parser/types.ts:347](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L347) |
+| `label` | `string` | The label displayed to participants. Markdown is supported. | [parser/types.ts:343](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L343) |
+| `value?` | `string` | The value stored in the participant's data. Defaults to label. | [parser/types.ts:345](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L345) |
diff --git a/docs/typedoc/interfaces/StudyConfig.md b/docs/typedoc/interfaces/StudyConfig.md
index ce9594c9b8..24cce0bf04 100644
--- a/docs/typedoc/interfaces/StudyConfig.md
+++ b/docs/typedoc/interfaces/StudyConfig.md
@@ -1,11 +1,11 @@
# StudyConfig
-Defined in: [parser/types.ts:1832](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1832)
+Defined in: [parser/types.ts:1838](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1838)
The StudyConfig interface is used to define the properties of a study configuration. This is a JSON object with four main components: the StudyMetadata, the UIConfig, the Components, and the Sequence. Below is the general template that should be followed when constructing a Study configuration file.
```json
{
- "$schema": "https://raw.githubusercontent.com/revisit-studies/study/v2.4.2/src/parser/StudyConfigSchema.json",
+ "$schema": "https://raw.githubusercontent.com/revisit-studies/study/v2.4.3/src/parser/StudyConfigSchema.json",
"studyMetadata": {
...
},
@@ -31,11 +31,11 @@ The `$schema` line is used to verify the schema. If you're using VSCode (or othe
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `$schema` | `string` | A required json schema property. This should point to the github link for the version of the schema you would like. The `$schema` line is used to verify the schema. If you're using VSCode (or other similar IDEs), including this line will allow for autocomplete and helpful suggestions when writing the study configuration. See examples for more information | [parser/types.ts:1834](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1834) |
-| `baseComponents?` | [`BaseComponents`](../type-aliases/BaseComponents.md) | The base components that are used in the study. These components can be used to template other components. See [BaseComponents](../../type-aliases/BaseComponents) for more information. | [parser/types.ts:1844](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1844) |
-| `components` | `Record`\<`string`, [`IndividualComponent`](../type-aliases/IndividualComponent.md) \| [`InheritedComponent`](../type-aliases/InheritedComponent.md)\> | The components that are used in the study. They must be fully defined here with all properties. Some properties may be inherited from baseComponents. | [parser/types.ts:1846](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1846) |
-| `importedLibraries?` | `string`[] | A list of libraries that are used in the study. This is used to import external libraries into the study. Library names are valid namespaces to be used later. | [parser/types.ts:1842](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1842) |
-| `sequence` | [`ComponentBlock`](ComponentBlock.md) \| [`DynamicBlock`](DynamicBlock.md) | The order of the components in the study. This might include some randomness. | [parser/types.ts:1848](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1848) |
-| `studyMetadata` | [`StudyMetadata`](StudyMetadata.md) | The metadata for the study. This is used to identify the study and version in the data file. | [parser/types.ts:1836](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1836) |
-| `studyRules?` | [`StudyRules`](StudyRules.md) | The study rules for the study. This is used to configure study constraints such as browsers, device sizes, etc. | [parser/types.ts:1840](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1840) |
-| `uiConfig` | [`UIConfig`](UIConfig.md) | The UI configuration for the study. This is used to configure the UI of the app. | [parser/types.ts:1838](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1838) |
+| `$schema` | `string` | A required json schema property. This should point to the github link for the version of the schema you would like. The `$schema` line is used to verify the schema. If you're using VSCode (or other similar IDEs), including this line will allow for autocomplete and helpful suggestions when writing the study configuration. See examples for more information | [parser/types.ts:1840](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1840) |
+| `baseComponents?` | [`BaseComponents`](../type-aliases/BaseComponents.md) | The base components that are used in the study. These components can be used to template other components. See [BaseComponents](../../type-aliases/BaseComponents) for more information. | [parser/types.ts:1850](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1850) |
+| `components` | `Record`\<`string`, [`IndividualComponent`](../type-aliases/IndividualComponent.md) \| [`InheritedComponent`](../type-aliases/InheritedComponent.md)\> | The components that are used in the study. They must be fully defined here with all properties. Some properties may be inherited from baseComponents. | [parser/types.ts:1852](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1852) |
+| `importedLibraries?` | `string`[] | A list of libraries that are used in the study. This is used to import external libraries into the study. Library names are valid namespaces to be used later. | [parser/types.ts:1848](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1848) |
+| `sequence` | [`ComponentBlock`](ComponentBlock.md) \| [`DynamicBlock`](DynamicBlock.md) | The order of the components in the study. This might include some randomness. | [parser/types.ts:1854](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1854) |
+| `studyMetadata` | [`StudyMetadata`](StudyMetadata.md) | The metadata for the study. This is used to identify the study and version in the data file. | [parser/types.ts:1842](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1842) |
+| `studyRules?` | [`StudyRules`](StudyRules.md) | The study rules for the study. This is used to configure study constraints such as browsers, device sizes, etc. | [parser/types.ts:1846](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1846) |
+| `uiConfig` | [`UIConfig`](UIConfig.md) | The UI configuration for the study. This is used to configure the UI of the app. | [parser/types.ts:1844](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1844) |
diff --git a/docs/typedoc/interfaces/StudyMetadata.md b/docs/typedoc/interfaces/StudyMetadata.md
index f71402ec5d..8b96aa0f52 100644
--- a/docs/typedoc/interfaces/StudyMetadata.md
+++ b/docs/typedoc/interfaces/StudyMetadata.md
@@ -1,6 +1,6 @@
# StudyMetadata
-Defined in: [parser/types.ts:53](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L53)
+Defined in: [parser/types.ts:53](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L53)
The StudyMetadata is used to describe certain properties of a study.
Some of this data is displayed on the landing page when running the app, such as the title and description.
@@ -26,9 +26,9 @@ Below is an example of a StudyMetadata entry in your study configuration file:
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `authors` | `string`[] | The authors of your study. | [parser/types.ts:59](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L59) |
-| `date` | `string` | The date of your study, may be useful for the researcher. | [parser/types.ts:61](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L61) |
-| `description` | `string` | The description of your study, shown on the landing page. | [parser/types.ts:63](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L63) |
-| `organizations` | `string`[] | The organizations that are associated with your study. | [parser/types.ts:65](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L65) |
-| `title` | `string` | The title of your study, shown on the landing page. | [parser/types.ts:55](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L55) |
-| `version` | `string` | The version of your study. When you change a configuration file after a study has already been distributed to participants, you can change the version number so that the participants who see this new configuration file can be identified. | [parser/types.ts:57](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L57) |
+| `authors` | `string`[] | The authors of your study. | [parser/types.ts:59](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L59) |
+| `date` | `string` | The date of your study, may be useful for the researcher. | [parser/types.ts:61](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L61) |
+| `description` | `string` | The description of your study, shown on the landing page. | [parser/types.ts:63](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L63) |
+| `organizations` | `string`[] | The organizations that are associated with your study. | [parser/types.ts:65](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L65) |
+| `title` | `string` | The title of your study, shown on the landing page. | [parser/types.ts:55](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L55) |
+| `version` | `string` | The version of your study. When you change a configuration file after a study has already been distributed to participants, you can change the version number so that the participants who see this new configuration file can be identified. | [parser/types.ts:57](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L57) |
diff --git a/docs/typedoc/interfaces/StudyRules.md b/docs/typedoc/interfaces/StudyRules.md
index ee1893f30c..1a27b5cab1 100644
--- a/docs/typedoc/interfaces/StudyRules.md
+++ b/docs/typedoc/interfaces/StudyRules.md
@@ -1,6 +1,6 @@
# StudyRules
-Defined in: [parser/types.ts:164](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L164)
+Defined in: [parser/types.ts:164](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L164)
The StudyRules are used to define a study's constraints to determine whether a participant can take the study.
If the criteria are not met, a warning message will be displayed.
@@ -43,7 +43,7 @@ Below is an example of a StudyRules entry in your study configuration file:
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `browsers?` | [`BrowserRules`](../type-aliases/BrowserRules.md) | Browser constraints | [parser/types.ts:168](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L168) |
-| `devices?` | [`DeviceRules`](../type-aliases/DeviceRules.md) | Browser constraints | [parser/types.ts:170](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L170) |
-| `display?` | [`DisplayRules`](../type-aliases/DisplayRules.md) | Display size constraints | [parser/types.ts:166](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L166) |
-| `inputs?` | [`InputRules`](../type-aliases/InputRules.md) | Input constraints | [parser/types.ts:172](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L172) |
+| `browsers?` | [`BrowserRules`](../type-aliases/BrowserRules.md) | Browser constraints | [parser/types.ts:168](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L168) |
+| `devices?` | [`DeviceRules`](../type-aliases/DeviceRules.md) | Browser constraints | [parser/types.ts:170](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L170) |
+| `display?` | [`DisplayRules`](../type-aliases/DisplayRules.md) | Display size constraints | [parser/types.ts:166](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L166) |
+| `inputs?` | [`InputRules`](../type-aliases/InputRules.md) | Input constraints | [parser/types.ts:172](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L172) |
diff --git a/docs/typedoc/interfaces/TextOnlyResponse.md b/docs/typedoc/interfaces/TextOnlyResponse.md
index 429cb81825..cee5474707 100644
--- a/docs/typedoc/interfaces/TextOnlyResponse.md
+++ b/docs/typedoc/interfaces/TextOnlyResponse.md
@@ -1,6 +1,6 @@
# TextOnlyResponse
-Defined in: [parser/types.ts:902](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L902)
+Defined in: [parser/types.ts:902](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L902)
The TextOnlyResponse interface is used to define the properties of a text only response.
TextOnlyResponses render as a block of text that is displayed to the user. This can be used to display instructions or other information.
@@ -25,20 +25,20 @@ In this example, the text only response is displayed below the stimulus and the
| Property | Type | Description | Overrides | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ | ------ |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | - | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L390) |
-| `hidden?` | `undefined` | - | - | - | [parser/types.ts:914](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L914) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | - | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L362) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | - | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L368) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | - | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L372) |
-| `paramCapture?` | `undefined` | - | - | - | [parser/types.ts:913](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L913) |
-| `prompt` | `string` | The markdown text that is displayed to the user. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | - | [parser/types.ts:905](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L905) |
-| `required?` | `undefined` | - | - | - | [parser/types.ts:910](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L910) |
-| `requiredLabel?` | `undefined` | - | - | - | [parser/types.ts:912](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L912) |
-| `requiredValue?` | `undefined` | - | - | - | [parser/types.ts:911](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L911) |
-| `restartEnumeration?` | `boolean` | Whether to restart the enumeration of the questions. Defaults to false. | - | - | [parser/types.ts:907](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L907) |
-| `secondaryText?` | `undefined` | - | - | - | [parser/types.ts:909](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L909) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | - | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L388) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | - | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L386) |
-| `type` | `"textOnly"` | - | - | - | [parser/types.ts:903](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L903) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | - | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L382) |
-| `withDontKnow?` | `undefined` | - | - | - | [parser/types.ts:915](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L915) |
+| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | - | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:390](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L390) |
+| `hidden?` | `undefined` | - | - | - | [parser/types.ts:914](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L914) |
+| `id` | `string` | The id of the response. This is used to identify the response in the data file. | - | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:362](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L362) |
+| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | - | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:368](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L368) |
+| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | - | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:372](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L372) |
+| `paramCapture?` | `undefined` | - | - | - | [parser/types.ts:913](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L913) |
+| `prompt` | `string` | The markdown text that is displayed to the user. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | - | [parser/types.ts:905](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L905) |
+| `required?` | `undefined` | - | - | - | [parser/types.ts:910](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L910) |
+| `requiredLabel?` | `undefined` | - | - | - | [parser/types.ts:912](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L912) |
+| `requiredValue?` | `undefined` | - | - | - | [parser/types.ts:911](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L911) |
+| `restartEnumeration?` | `boolean` | Whether to restart the enumeration of the questions. Defaults to false. | - | - | [parser/types.ts:907](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L907) |
+| `secondaryText?` | `undefined` | - | - | - | [parser/types.ts:909](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L909) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | - | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:388](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L388) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | - | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:386](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L386) |
+| `type` | `"textOnly"` | - | - | - | [parser/types.ts:903](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L903) |
+| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | - | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:382](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L382) |
+| `withDontKnow?` | `undefined` | - | - | - | [parser/types.ts:915](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L915) |
diff --git a/docs/typedoc/interfaces/UIConfig.md b/docs/typedoc/interfaces/UIConfig.md
index 5f5afde37d..3574154c39 100644
--- a/docs/typedoc/interfaces/UIConfig.md
+++ b/docs/typedoc/interfaces/UIConfig.md
@@ -1,6 +1,6 @@
# UIConfig
-Defined in: [parser/types.ts:250](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L250)
+Defined in: [parser/types.ts:250](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L250)
The UIConfig is used to configure the UI of the app.
This includes the logo, contact email, and whether to show a progress bar.
@@ -28,38 +28,38 @@ In the above, the `/assets/` path is referring to the path to your i
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. Defaults to true. | [parser/types.ts:291](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L291) |
-| `autoDownloadStudy?` | `boolean` | Controls whether the study data is automatically downloaded at the end of the study. | [parser/types.ts:313](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L313) |
-| `autoDownloadTime?` | `number` | The time in milliseconds to wait before automatically downloading the study data. | [parser/types.ts:315](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L315) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [parser/types.ts:295](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L295) |
-| `contactEmail` | `string` | The email address that used during the study if a participant clicks contact. | [parser/types.ts:255](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L255) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. | [parser/types.ts:301](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L301) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. | [parser/types.ts:271](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L271) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. | [parser/types.ts:269](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L269) |
-| `logoPath` | `string` | The path to the logo image. This is displayed on the landing page and the header. | [parser/types.ts:253](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L253) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. | [parser/types.ts:281](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L281) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. | [parser/types.ts:279](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L279) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. | [parser/types.ts:277](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L277) |
-| `nextButtonText?` | `string` | The text to display on the next button. | [parser/types.ts:275](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L275) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. Defaults to false. | [parser/types.ts:273](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L273) |
-| `numSequences?` | `number` | The number of sequences to generate for the study. This is used to generate the random sequences for the study. Defaults to 1000. | [parser/types.ts:317](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L317) |
-| `participantNameField?` | `string` | The default name field for a participant. Directs reVISit to use the task and response id as a name in UI elements. For example, if you wanted the response 'prolificId' from the task 'introduction' to be the name, this field would be 'introduction.prolificId' | [parser/types.ts:321](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L321) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. | [parser/types.ts:283](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L283) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. Defaults to false. | [parser/types.ts:287](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L287) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If true, will record audio on all components unless deactivated on individual components. Defaults to false. | [parser/types.ts:293](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L293) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If true, will record audio on all components unless deactivated on individual components. This must be set to true if you want to record audio on any component in your study. Defaults to false. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before any component that you want to record the screen on to ensure permissions are granted and screen capture has started. | [parser/types.ts:297](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L297) |
-| `recordScreenFPS?` | `number` | Desired fps for recording screen. If possible, this value will be used, but if it's not possible, the user agent will use the closest possible match. | [parser/types.ts:299](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L299) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. Defaults to false. | [parser/types.ts:303](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L303) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. | [parser/types.ts:265](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L265) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. | [parser/types.ts:267](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L267) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. Defaults to 300. | [parser/types.ts:263](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L263) |
-| `studyEndAutoRedirectDelay?` | `number` | The duration after which participants will be auto-redirected to the URL specified in studyEndAutoRedirectURL. Defaults to 10000 milliseconds (10 seconds). | [parser/types.ts:311](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L311) |
-| `studyEndAutoRedirectURL?` | `string` | The URL which participants will be auto-redirected to when the study ends. The default time before redirecting is 10 seconds, but this can be configured with the studyEndAutoRedirectDelay field. | [parser/types.ts:309](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L309) |
-| `studyEndMsg?` | `string` | The message to display when the study ends. | [parser/types.ts:307](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L307) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [parser/types.ts:323](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L323) |
-| `timeoutReject?` | `boolean` | Whether to redirect a timed out participant to a rejection page. This only works for components where the `nextButtonDisableTime` field is set. | [parser/types.ts:285](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L285) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. The next button will be disabled until either the correct answer is given or the number of attempts is reached. When the number of attempts is reached, if the answer is incorrect still, the correct value will be shown to the participant. The default value is 2. Providing a value of -1 will allow infinite attempts and the participant must enter the correct answer to continue, and reVISit will not show the correct answer to the user. | [parser/types.ts:289](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L289) |
-| `urlParticipantIdParam?` | `string` | If the participant ID is passed in the URL, this is the name of the querystring parameter that is used to capture the participant ID (e.g. PROLIFIC_ID). This will allow a user to continue a study on different devices and browsers. | [parser/types.ts:319](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L319) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. Defaults to 100. E.g 100 here means 1000ms / 100ms = 10 times a second, 200 here means 1000ms / 200ms = 5 times per second | [parser/types.ts:305](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L305) |
-| `withProgressBar` | `boolean` | Controls whether the progress bar is rendered in the study. | [parser/types.ts:257](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L257) |
-| `withSidebar` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. | [parser/types.ts:259](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L259) |
+| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. Defaults to true. | [parser/types.ts:291](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L291) |
+| `autoDownloadStudy?` | `boolean` | Controls whether the study data is automatically downloaded at the end of the study. | [parser/types.ts:313](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L313) |
+| `autoDownloadTime?` | `number` | The time in milliseconds to wait before automatically downloading the study data. | [parser/types.ts:315](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L315) |
+| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [parser/types.ts:295](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L295) |
+| `contactEmail` | `string` | The email address that used during the study if a participant clicks contact. | [parser/types.ts:255](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L255) |
+| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. | [parser/types.ts:301](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L301) |
+| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. | [parser/types.ts:271](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L271) |
+| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. | [parser/types.ts:269](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L269) |
+| `logoPath` | `string` | The path to the logo image. This is displayed on the landing page and the header. | [parser/types.ts:253](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L253) |
+| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. | [parser/types.ts:281](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L281) |
+| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. | [parser/types.ts:279](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L279) |
+| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. | [parser/types.ts:277](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L277) |
+| `nextButtonText?` | `string` | The text to display on the next button. | [parser/types.ts:275](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L275) |
+| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. Defaults to false. | [parser/types.ts:273](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L273) |
+| `numSequences?` | `number` | The number of sequences to generate for the study. This is used to generate the random sequences for the study. Defaults to 1000. | [parser/types.ts:317](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L317) |
+| `participantNameField?` | `string` | The default name field for a participant. Directs reVISit to use the task and response id as a name in UI elements. For example, if you wanted the response 'prolificId' from the task 'introduction' to be the name, this field would be 'introduction.prolificId' | [parser/types.ts:321](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L321) |
+| `previousButtonText?` | `string` | The text that is displayed on the previous button. | [parser/types.ts:283](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L283) |
+| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. Defaults to false. | [parser/types.ts:287](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L287) |
+| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If true, will record audio on all components unless deactivated on individual components. Defaults to false. | [parser/types.ts:293](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L293) |
+| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If true, will record audio on all components unless deactivated on individual components. This must be set to true if you want to record audio on any component in your study. Defaults to false. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before any component that you want to record the screen on to ensure permissions are granted and screen capture has started. | [parser/types.ts:297](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L297) |
+| `recordScreenFPS?` | `number` | Desired fps for recording screen. If possible, this value will be used, but if it's not possible, the user agent will use the closest possible match. | [parser/types.ts:299](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L299) |
+| `responseDividers?` | `boolean` | Whether to show the response dividers. Defaults to false. | [parser/types.ts:303](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L303) |
+| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. | [parser/types.ts:265](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L265) |
+| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. | [parser/types.ts:267](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L267) |
+| `sidebarWidth?` | `number` | The width of the left sidebar. Defaults to 300. | [parser/types.ts:263](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L263) |
+| `studyEndAutoRedirectDelay?` | `number` | The duration after which participants will be auto-redirected to the URL specified in studyEndAutoRedirectURL. Defaults to 10000 milliseconds (10 seconds). | [parser/types.ts:311](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L311) |
+| `studyEndAutoRedirectURL?` | `string` | The URL which participants will be auto-redirected to when the study ends. The default time before redirecting is 10 seconds, but this can be configured with the studyEndAutoRedirectDelay field. | [parser/types.ts:309](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L309) |
+| `studyEndMsg?` | `string` | The message to display when the study ends. | [parser/types.ts:307](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L307) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [parser/types.ts:323](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L323) |
+| `timeoutReject?` | `boolean` | Whether to redirect a timed out participant to a rejection page. This only works for components where the `nextButtonDisableTime` field is set. | [parser/types.ts:285](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L285) |
+| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. The next button will be disabled until either the correct answer is given or the number of attempts is reached. When the number of attempts is reached, if the answer is incorrect still, the correct value will be shown to the participant. The default value is 2. Providing a value of -1 will allow infinite attempts and the participant must enter the correct answer to continue, and reVISit will not show the correct answer to the user. | [parser/types.ts:289](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L289) |
+| `urlParticipantIdParam?` | `string` | If the participant ID is passed in the URL, this is the name of the querystring parameter that is used to capture the participant ID (e.g. PROLIFIC_ID). This will allow a user to continue a study on different devices and browsers. | [parser/types.ts:319](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L319) |
+| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. Defaults to 100. E.g 100 here means 1000ms / 100ms = 10 times a second, 200 here means 1000ms / 200ms = 5 times per second | [parser/types.ts:305](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L305) |
+| `withProgressBar` | `boolean` | Controls whether the progress bar is rendered in the study. | [parser/types.ts:257](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L257) |
+| `withSidebar` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. | [parser/types.ts:259](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L259) |
diff --git a/docs/typedoc/interfaces/VegaComponentConfig.md b/docs/typedoc/interfaces/VegaComponentConfig.md
index 4603988032..e2a9e034f7 100644
--- a/docs/typedoc/interfaces/VegaComponentConfig.md
+++ b/docs/typedoc/interfaces/VegaComponentConfig.md
@@ -1,6 +1,6 @@
# VegaComponentConfig
-Defined in: [parser/types.ts:1304](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1304)
+Defined in: [parser/types.ts:1310](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1310)
The VegaComponentConfig interface is used to define the properties of a Vega Component. This component is used to render a Vega/Vega-Lite Component by adding Vega/Vega-Lite specs within the reVISit config itself.
@@ -39,37 +39,40 @@ In this example, when a user clicks on a rectangle in the Vega chart, the `revis
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:1041](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1041) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:1045](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1045) |
-| `config` | `object` | The vega or vega-lite configuration. | - | [parser/types.ts:1307](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1307) |
-| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1001) |
-| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1005) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1049](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1049) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:1021](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1021) |
-| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:1017](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1017) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:1019](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1019) |
-| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1003) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:1031](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1031) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:1029](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1029) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:1027](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1027) |
-| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:1025](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1025) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:1023](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1023) |
-| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:1033](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1033) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:1035](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1035) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:1037](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1037) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:1043](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1043) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:1047](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1047) |
-| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L997) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1051](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1051) |
-| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1055](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1055) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:1013](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1013) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:1015](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1015) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1011) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1059](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1059) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1057](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1057) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:1039](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1039) |
-| `type` | `"vega"` | - | - | [parser/types.ts:1305](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1305) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1053](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1053) |
-| `withActions?` | `boolean` | Whether to include vega actions. Defaults to true. | - | [parser/types.ts:1309](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1309) |
-| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1007) |
-| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1009) |
+| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:1047](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1047) |
+| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:1051](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1051) |
+| `config` | `object` | The vega or vega-lite configuration. | - | [parser/types.ts:1313](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1313) |
+| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1001) |
+| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1005) |
+| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1055](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1055) |
+| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:1021](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1021) |
+| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:1017](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1017) |
+| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:1019](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1019) |
+| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1003) |
+| `nextButtonAutoAdvanceTime?` | `number` | The time in milliseconds after which the participant is automatically advanced to the next component without saving answers from the current component. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceTime`](BaseIndividualComponent.md#nextbuttonautoadvancetime) | [parser/types.ts:1033](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1033) |
+| `nextButtonAutoAdvanceWarningMessage?` | `string` | The warning message shown before auto-advance. Include `{seconds}` to interpolate the remaining number and `{unit}` to interpolate `second`/`seconds`. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceWarningMessage`](BaseIndividualComponent.md#nextbuttonautoadvancewarningmessage) | [parser/types.ts:1037](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1037) |
+| `nextButtonAutoAdvanceWarningTime?` | `number` | The time in milliseconds before auto-advance when the warning message is shown. Defaults to 30000. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceWarningTime`](BaseIndividualComponent.md#nextbuttonautoadvancewarningtime) | [parser/types.ts:1035](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1035) |
+| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:1031](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1031) |
+| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:1029](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1029) |
+| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:1027](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1027) |
+| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:1025](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1025) |
+| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:1023](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1023) |
+| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:1039](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1039) |
+| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:1041](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1041) |
+| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:1043](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1043) |
+| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:1049](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1049) |
+| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:1053](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1053) |
+| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L997) |
+| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1057](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1057) |
+| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1061](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1061) |
+| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:1013](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1013) |
+| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:1015](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1015) |
+| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1011) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1065](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1065) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1063](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1063) |
+| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:1045](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1045) |
+| `type` | `"vega"` | - | - | [parser/types.ts:1311](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1311) |
+| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1059](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1059) |
+| `withActions?` | `boolean` | Whether to include vega actions. Defaults to true. | - | [parser/types.ts:1315](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1315) |
+| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1007) |
+| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1009) |
diff --git a/docs/typedoc/interfaces/VegaComponentPath.md b/docs/typedoc/interfaces/VegaComponentPath.md
index 7ab1102ecf..7b5b977220 100644
--- a/docs/typedoc/interfaces/VegaComponentPath.md
+++ b/docs/typedoc/interfaces/VegaComponentPath.md
@@ -1,6 +1,6 @@
# VegaComponentPath
-Defined in: [parser/types.ts:1266](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1266)
+Defined in: [parser/types.ts:1272](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1272)
The VegaComponentPath interface is used to define the properties of a Vega Component. This component is used to render a Vega/Vega-Lite Component with path pointing to your Vega/Vega-Lite specs file.
@@ -39,37 +39,40 @@ If you are using Vega, you can use signals with `revisitAnswer` to send the user
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:1041](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1041) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:1045](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1045) |
-| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1001) |
-| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1005) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1049](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1049) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:1021](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1021) |
-| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:1017](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1017) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:1019](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1019) |
-| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1003) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:1031](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1031) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:1029](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1029) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:1027](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1027) |
-| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:1025](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1025) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:1023](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1023) |
-| `path` | `string` | The path to the vega file. This should be a relative path from the public folder. | - | [parser/types.ts:1269](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1269) |
-| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:1033](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1033) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:1035](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1035) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:1037](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1037) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:1043](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1043) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:1047](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1047) |
-| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L997) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1051](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1051) |
-| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1055](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1055) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:1013](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1013) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:1015](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1015) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1011) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1059](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1059) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1057](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1057) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:1039](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1039) |
-| `type` | `"vega"` | - | - | [parser/types.ts:1267](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1267) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1053](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1053) |
-| `withActions?` | `boolean` | Whether to include vega actions. Defaults to true. | - | [parser/types.ts:1271](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1271) |
-| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1007) |
-| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1009) |
+| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:1047](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1047) |
+| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:1051](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1051) |
+| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1001) |
+| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1005) |
+| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1055](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1055) |
+| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:1021](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1021) |
+| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:1017](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1017) |
+| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:1019](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1019) |
+| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1003) |
+| `nextButtonAutoAdvanceTime?` | `number` | The time in milliseconds after which the participant is automatically advanced to the next component without saving answers from the current component. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceTime`](BaseIndividualComponent.md#nextbuttonautoadvancetime) | [parser/types.ts:1033](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1033) |
+| `nextButtonAutoAdvanceWarningMessage?` | `string` | The warning message shown before auto-advance. Include `{seconds}` to interpolate the remaining number and `{unit}` to interpolate `second`/`seconds`. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceWarningMessage`](BaseIndividualComponent.md#nextbuttonautoadvancewarningmessage) | [parser/types.ts:1037](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1037) |
+| `nextButtonAutoAdvanceWarningTime?` | `number` | The time in milliseconds before auto-advance when the warning message is shown. Defaults to 30000. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceWarningTime`](BaseIndividualComponent.md#nextbuttonautoadvancewarningtime) | [parser/types.ts:1035](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1035) |
+| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:1031](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1031) |
+| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:1029](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1029) |
+| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:1027](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1027) |
+| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:1025](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1025) |
+| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:1023](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1023) |
+| `path` | `string` | The path to the vega file. This should be a relative path from the public folder. | - | [parser/types.ts:1275](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1275) |
+| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:1039](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1039) |
+| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:1041](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1041) |
+| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:1043](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1043) |
+| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:1049](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1049) |
+| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:1053](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1053) |
+| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L997) |
+| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1057](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1057) |
+| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1061](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1061) |
+| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:1013](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1013) |
+| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:1015](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1015) |
+| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1011) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1065](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1065) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1063](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1063) |
+| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:1045](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1045) |
+| `type` | `"vega"` | - | - | [parser/types.ts:1273](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1273) |
+| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1059](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1059) |
+| `withActions?` | `boolean` | Whether to include vega actions. Defaults to true. | - | [parser/types.ts:1277](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1277) |
+| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1007) |
+| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1009) |
diff --git a/docs/typedoc/interfaces/VideoComponent.md b/docs/typedoc/interfaces/VideoComponent.md
index 33f64f1d6b..dd7223e5d7 100644
--- a/docs/typedoc/interfaces/VideoComponent.md
+++ b/docs/typedoc/interfaces/VideoComponent.md
@@ -1,6 +1,6 @@
# VideoComponent
-Defined in: [parser/types.ts:1330](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1330)
+Defined in: [parser/types.ts:1336](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1336)
The VideoComponent interface is used to define the properties of a video component. This component is used to render a video with optional controls.
@@ -24,38 +24,41 @@ For example, to render a training video with a path of `/assets/vide
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:1041](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1041) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:1045](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1045) |
-| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1001) |
-| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1005) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1049](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1049) |
-| `forceCompletion?` | `boolean` | Whether to force the video to play until the end. Defaults to true. | - | [parser/types.ts:1335](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1335) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:1021](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1021) |
-| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:1017](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1017) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:1019](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1019) |
-| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1003) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:1031](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1031) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:1029](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1029) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:1027](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1027) |
-| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:1025](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1025) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:1023](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1023) |
-| `path` | `string` | The path to the video. This could be a relative path from the public folder or might be a url to an external website. | - | [parser/types.ts:1333](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1333) |
-| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:1033](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1033) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:1035](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1035) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:1037](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1037) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:1043](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1043) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:1047](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1047) |
-| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L997) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1051](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1051) |
-| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1055](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1055) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:1013](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1013) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:1015](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1015) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1011) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1059](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1059) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1057](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1057) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:1039](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1039) |
-| `type` | `"video"` | - | - | [parser/types.ts:1331](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1331) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1053](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1053) |
-| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1007) |
-| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1009) |
-| `withTimeline?` | `boolean` | Whether to show the video timeline. Defaults to false. | - | [parser/types.ts:1337](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1337) |
+| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:1047](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1047) |
+| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:1051](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1051) |
+| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1001) |
+| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1005) |
+| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1055](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1055) |
+| `forceCompletion?` | `boolean` | Whether to force the video to play until the end. Defaults to true. | - | [parser/types.ts:1341](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1341) |
+| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:1021](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1021) |
+| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:1017](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1017) |
+| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:1019](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1019) |
+| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1003) |
+| `nextButtonAutoAdvanceTime?` | `number` | The time in milliseconds after which the participant is automatically advanced to the next component without saving answers from the current component. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceTime`](BaseIndividualComponent.md#nextbuttonautoadvancetime) | [parser/types.ts:1033](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1033) |
+| `nextButtonAutoAdvanceWarningMessage?` | `string` | The warning message shown before auto-advance. Include `{seconds}` to interpolate the remaining number and `{unit}` to interpolate `second`/`seconds`. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceWarningMessage`](BaseIndividualComponent.md#nextbuttonautoadvancewarningmessage) | [parser/types.ts:1037](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1037) |
+| `nextButtonAutoAdvanceWarningTime?` | `number` | The time in milliseconds before auto-advance when the warning message is shown. Defaults to 30000. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceWarningTime`](BaseIndividualComponent.md#nextbuttonautoadvancewarningtime) | [parser/types.ts:1035](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1035) |
+| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:1031](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1031) |
+| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:1029](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1029) |
+| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:1027](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1027) |
+| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:1025](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1025) |
+| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:1023](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1023) |
+| `path` | `string` | The path to the video. This could be a relative path from the public folder or might be a url to an external website. | - | [parser/types.ts:1339](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1339) |
+| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:1039](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1039) |
+| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:1041](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1041) |
+| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:1043](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1043) |
+| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:1049](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1049) |
+| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:1053](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1053) |
+| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L997) |
+| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1057](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1057) |
+| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1061](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1061) |
+| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:1013](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1013) |
+| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:1015](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1015) |
+| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1011) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1065](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1065) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1063](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1063) |
+| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:1045](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1045) |
+| `type` | `"video"` | - | - | [parser/types.ts:1337](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1337) |
+| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1059](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1059) |
+| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1007) |
+| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1009) |
+| `withTimeline?` | `boolean` | Whether to show the video timeline. Defaults to false. | - | [parser/types.ts:1343](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1343) |
diff --git a/docs/typedoc/interfaces/WebsiteComponent.md b/docs/typedoc/interfaces/WebsiteComponent.md
index 0963f53d5d..995b5c3d9d 100644
--- a/docs/typedoc/interfaces/WebsiteComponent.md
+++ b/docs/typedoc/interfaces/WebsiteComponent.md
@@ -1,6 +1,6 @@
# WebsiteComponent
-Defined in: [parser/types.ts:1206](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1206)
+Defined in: [parser/types.ts:1212](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1212)
The WebsiteComponent interface is used to define the properties of a website component. A WebsiteComponent is used to render an iframe with a website inside of it. This can be used to display an external website or an html file that is located in the public folder.
```json
@@ -64,37 +64,40 @@ const trrack = initializeTrrack({
| Property | Type | Description | Inherited from | Defined in |
| ------ | ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:1041](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1041) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:1045](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1045) |
-| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1001) |
-| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1005) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1049](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1049) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:1021](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1021) |
-| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:1017](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1017) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:1019](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1019) |
-| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1003) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:1031](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1031) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:1029](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1029) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:1027](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1027) |
-| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:1025](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1025) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:1023](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1023) |
-| `parameters?` | `Record`\<`string`, `unknown`\> | The parameters that are passed to the website (iframe). These can be used within your website to render different things. | - | [parser/types.ts:1211](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1211) |
-| `path` | `string` | The path to the website. This should be a relative path from the public folder or could be an external website. | - | [parser/types.ts:1209](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1209) |
-| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:1033](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1033) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:1035](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1035) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:1037](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1037) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:1043](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1043) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:1047](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1047) |
-| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L997) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1051](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1051) |
-| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1055](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1055) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:1013](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1013) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:1015](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1015) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1011) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1059](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1059) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1057](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1057) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:1039](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1039) |
-| `type` | `"website"` | - | - | [parser/types.ts:1207](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1207) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1053](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1053) |
-| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1007) |
-| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1009) |
+| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:1047](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1047) |
+| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:1051](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1051) |
+| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1001) |
+| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1005) |
+| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1055](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1055) |
+| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:1021](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1021) |
+| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:1017](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1017) |
+| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:1019](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1019) |
+| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1003) |
+| `nextButtonAutoAdvanceTime?` | `number` | The time in milliseconds after which the participant is automatically advanced to the next component without saving answers from the current component. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceTime`](BaseIndividualComponent.md#nextbuttonautoadvancetime) | [parser/types.ts:1033](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1033) |
+| `nextButtonAutoAdvanceWarningMessage?` | `string` | The warning message shown before auto-advance. Include `{seconds}` to interpolate the remaining number and `{unit}` to interpolate `second`/`seconds`. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceWarningMessage`](BaseIndividualComponent.md#nextbuttonautoadvancewarningmessage) | [parser/types.ts:1037](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1037) |
+| `nextButtonAutoAdvanceWarningTime?` | `number` | The time in milliseconds before auto-advance when the warning message is shown. Defaults to 30000. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonAutoAdvanceWarningTime`](BaseIndividualComponent.md#nextbuttonautoadvancewarningtime) | [parser/types.ts:1035](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1035) |
+| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:1031](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1031) |
+| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:1029](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1029) |
+| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:1027](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1027) |
+| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:1025](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1025) |
+| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:1023](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1023) |
+| `parameters?` | `Record`\<`string`, `unknown`\> | The parameters that are passed to the website (iframe). These can be used within your website to render different things. | - | [parser/types.ts:1217](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1217) |
+| `path` | `string` | The path to the website. This should be a relative path from the public folder or could be an external website. | - | [parser/types.ts:1215](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1215) |
+| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:1039](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1039) |
+| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:1041](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1041) |
+| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:1043](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1043) |
+| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:1049](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1049) |
+| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:1053](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1053) |
+| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L997) |
+| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1057](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1057) |
+| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1061](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1061) |
+| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:1013](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1013) |
+| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:1015](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1015) |
+| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1011) |
+| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1065](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1065) |
+| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1063](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1063) |
+| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:1045](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1045) |
+| `type` | `"website"` | - | - | [parser/types.ts:1213](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1213) |
+| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1059](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1059) |
+| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1007) |
+| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1009) |
diff --git a/docs/typedoc/type-aliases/BaseComponents.md b/docs/typedoc/type-aliases/BaseComponents.md
index 43efd2b4c2..a2ea971cb8 100644
--- a/docs/typedoc/type-aliases/BaseComponents.md
+++ b/docs/typedoc/type-aliases/BaseComponents.md
@@ -2,7 +2,7 @@
> **BaseComponents** = `Record`\<`string`, `Partial`\<[`IndividualComponent`](IndividualComponent.md)\>\>
-Defined in: [parser/types.ts:1804](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1804)
+Defined in: [parser/types.ts:1810](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1810)
The baseComponents is an optional set of components which can help template other components. For example, suppose you have a single HTML file that you want to display to the user several times. Instead of having the same component twice in the `components` list, you can have a single baseComponent with all the information that the two HTML components will share. A great example is showing the same HTML component but with two different questions;
diff --git a/docs/typedoc/type-aliases/BrowserRules.md b/docs/typedoc/type-aliases/BrowserRules.md
index 8bb7a95929..adb55a53a3 100644
--- a/docs/typedoc/type-aliases/BrowserRules.md
+++ b/docs/typedoc/type-aliases/BrowserRules.md
@@ -2,7 +2,7 @@
> **BrowserRules** = `object`
-Defined in: [parser/types.ts:85](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L85)
+Defined in: [parser/types.ts:85](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L85)
Rules specifying which browsers and their minimum versions the study supports.
@@ -10,5 +10,5 @@ Rules specifying which browsers and their minimum versions the study supports.
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `allowed` | [`UserBrowser`](UserBrowser.md)[] | List of browser types and their minimum version to support. | [parser/types.ts:87](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L87) |
-| `blockedMessage?` | `string` | Optional message to be displayed when browser criteria are not met. | [parser/types.ts:89](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L89) |
+| `allowed` | [`UserBrowser`](UserBrowser.md)[] | List of browser types and their minimum version to support. | [parser/types.ts:87](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L87) |
+| `blockedMessage?` | `string` | Optional message to be displayed when browser criteria are not met. | [parser/types.ts:89](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L89) |
diff --git a/docs/typedoc/type-aliases/ConfigResponseBlockLocation.md b/docs/typedoc/type-aliases/ConfigResponseBlockLocation.md
index 011a5d149c..c87c7ef152 100644
--- a/docs/typedoc/type-aliases/ConfigResponseBlockLocation.md
+++ b/docs/typedoc/type-aliases/ConfigResponseBlockLocation.md
@@ -2,4 +2,4 @@
> **ConfigResponseBlockLocation** = `Exclude`\<`ResponseBlockLocation`, `"stimulus"`\>
-Defined in: [parser/types.ts:72](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L72)
+Defined in: [parser/types.ts:72](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L72)
diff --git a/docs/typedoc/type-aliases/DeviceRules.md b/docs/typedoc/type-aliases/DeviceRules.md
index 9d7ce9a683..3eaca9e5e2 100644
--- a/docs/typedoc/type-aliases/DeviceRules.md
+++ b/docs/typedoc/type-aliases/DeviceRules.md
@@ -2,7 +2,7 @@
> **DeviceRules** = `object`
-Defined in: [parser/types.ts:95](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L95)
+Defined in: [parser/types.ts:95](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L95)
Rules specifying which device types the study supports.
@@ -10,5 +10,5 @@ Rules specifying which device types the study supports.
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `allowed` | [`UserDevice`](UserDevice.md)[] | List of device types to support. | [parser/types.ts:97](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L97) |
-| `blockedMessage?` | `string` | Optional message to be displayed when device criteria are not met. | [parser/types.ts:99](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L99) |
+| `allowed` | [`UserDevice`](UserDevice.md)[] | List of device types to support. | [parser/types.ts:97](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L97) |
+| `blockedMessage?` | `string` | Optional message to be displayed when device criteria are not met. | [parser/types.ts:99](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L99) |
diff --git a/docs/typedoc/type-aliases/DisplayRules.md b/docs/typedoc/type-aliases/DisplayRules.md
index 040d017d77..96b73f4092 100644
--- a/docs/typedoc/type-aliases/DisplayRules.md
+++ b/docs/typedoc/type-aliases/DisplayRules.md
@@ -2,7 +2,7 @@
> **DisplayRules** = `object`
-Defined in: [parser/types.ts:113](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L113)
+Defined in: [parser/types.ts:113](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L113)
Rules specifying which minimum screen dimensions for the study.
@@ -10,8 +10,8 @@ Rules specifying which minimum screen dimensions for the study.
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `blockedMessage?` | `string` | Optional message to be displayed when display criteria are not met. | [parser/types.ts:123](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L123) |
-| `maxHeight?` | `number` | The maximum screen height size for the study | [parser/types.ts:119](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L119) |
-| `maxWidth?` | `number` | The maximum screen width size for the study | [parser/types.ts:121](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L121) |
-| `minHeight` | `number` | The minimum screen height size for the study | [parser/types.ts:115](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L115) |
-| `minWidth` | `number` | The minimum screen width size for the study | [parser/types.ts:117](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L117) |
+| `blockedMessage?` | `string` | Optional message to be displayed when display criteria are not met. | [parser/types.ts:123](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L123) |
+| `maxHeight?` | `number` | The maximum screen height size for the study | [parser/types.ts:119](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L119) |
+| `maxWidth?` | `number` | The maximum screen width size for the study | [parser/types.ts:121](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L121) |
+| `minHeight` | `number` | The minimum screen height size for the study | [parser/types.ts:115](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L115) |
+| `minWidth` | `number` | The minimum screen width size for the study | [parser/types.ts:117](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L117) |
diff --git a/docs/typedoc/type-aliases/ErrorWarningCategory.md b/docs/typedoc/type-aliases/ErrorWarningCategory.md
index 5a8ff83a21..b3783fe1a7 100644
--- a/docs/typedoc/type-aliases/ErrorWarningCategory.md
+++ b/docs/typedoc/type-aliases/ErrorWarningCategory.md
@@ -2,4 +2,4 @@
> **ErrorWarningCategory** = `"invalid-config"` \| `"invalid-library-config"` \| `"undefined-library"` \| `"undefined-base-component"` \| `"undefined-component"` \| `"sequence-validation"` \| `"skip-validation"` \| `"unused-component"` \| `"disabled-sidebar"` \| `"default-contact-email"`
-Defined in: [parser/types.ts:1891](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1891)
+Defined in: [parser/types.ts:1897](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1897)
diff --git a/docs/typedoc/type-aliases/IndividualComponent.md b/docs/typedoc/type-aliases/IndividualComponent.md
index 7653181ce3..c974dc9a1f 100644
--- a/docs/typedoc/type-aliases/IndividualComponent.md
+++ b/docs/typedoc/type-aliases/IndividualComponent.md
@@ -2,4 +2,4 @@
> **IndividualComponent** = [`MarkdownComponent`](../interfaces/MarkdownComponent.md) \| [`ReactComponent`](../interfaces/ReactComponent.md) \| [`ImageComponent`](../interfaces/ImageComponent.md) \| [`WebsiteComponent`](../interfaces/WebsiteComponent.md) \| [`QuestionnaireComponent`](../interfaces/QuestionnaireComponent.md) \| [`VegaComponent`](VegaComponent.md) \| [`VideoComponent`](../interfaces/VideoComponent.md)
-Defined in: [parser/types.ts:1340](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1340)
+Defined in: [parser/types.ts:1346](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1346)
diff --git a/docs/typedoc/type-aliases/InheritedComponent.md b/docs/typedoc/type-aliases/InheritedComponent.md
index 7c50ca9efb..db9d649c19 100644
--- a/docs/typedoc/type-aliases/InheritedComponent.md
+++ b/docs/typedoc/type-aliases/InheritedComponent.md
@@ -2,7 +2,7 @@
> **InheritedComponent** = `Partial`\<[`IndividualComponent`](IndividualComponent.md)\> & `object`
-Defined in: [parser/types.ts:1759](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1759)
+Defined in: [parser/types.ts:1765](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1765)
An InheritedComponent is a component that inherits properties from a baseComponent. This is used to avoid repeating properties in components. This also means that components in the baseComponents object can be partially defined, while components in the components object can inherit from them and must be fully defined and include all properties (after potentially merging with a base component).
diff --git a/docs/typedoc/type-aliases/InputRules.md b/docs/typedoc/type-aliases/InputRules.md
index 4a633a4d67..e161285f9d 100644
--- a/docs/typedoc/type-aliases/InputRules.md
+++ b/docs/typedoc/type-aliases/InputRules.md
@@ -2,7 +2,7 @@
> **InputRules** = `object`
-Defined in: [parser/types.ts:105](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L105)
+Defined in: [parser/types.ts:105](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L105)
Rules specifying which input methods the study supports.
@@ -10,5 +10,5 @@ Rules specifying which input methods the study supports.
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `allowed` | [`UserInput`](UserInput.md)[] | List of inputs to support. | [parser/types.ts:107](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L107) |
-| `blockedMessage?` | `string` | Optional message to be displayed when input criteria are not met. | [parser/types.ts:109](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L109) |
+| `allowed` | [`UserInput`](UserInput.md)[] | List of inputs to support. | [parser/types.ts:107](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L107) |
+| `blockedMessage?` | `string` | Optional message to be displayed when input criteria are not met. | [parser/types.ts:109](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L109) |
diff --git a/docs/typedoc/type-aliases/InterruptionBlock.md b/docs/typedoc/type-aliases/InterruptionBlock.md
index 8160f121cc..4a487107ab 100644
--- a/docs/typedoc/type-aliases/InterruptionBlock.md
+++ b/docs/typedoc/type-aliases/InterruptionBlock.md
@@ -2,6 +2,6 @@
> **InterruptionBlock** = [`DeterministicInterruption`](../interfaces/DeterministicInterruption.md) \| [`RandomInterruption`](../interfaces/RandomInterruption.md)
-Defined in: [parser/types.ts:1447](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1447)
+Defined in: [parser/types.ts:1453](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1453)
The InterruptionBlock interface is used to define interruptions in a block. These can be used for breaks or attention checks. Interruptions can be deterministic or random.
diff --git a/docs/typedoc/type-aliases/JsonArray.md b/docs/typedoc/type-aliases/JsonArray.md
index 176a3533ae..7fd6bc0d64 100644
--- a/docs/typedoc/type-aliases/JsonArray.md
+++ b/docs/typedoc/type-aliases/JsonArray.md
@@ -2,4 +2,4 @@
> **JsonArray** = [`JsonValue`](JsonValue.md)[]
-Defined in: [parser/types.ts:9](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L9)
+Defined in: [parser/types.ts:9](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L9)
diff --git a/docs/typedoc/type-aliases/JsonPrimitive.md b/docs/typedoc/type-aliases/JsonPrimitive.md
index 2dbc59d702..76fe26b997 100644
--- a/docs/typedoc/type-aliases/JsonPrimitive.md
+++ b/docs/typedoc/type-aliases/JsonPrimitive.md
@@ -2,4 +2,4 @@
> **JsonPrimitive** = `string` \| `number` \| `boolean` \| `null`
-Defined in: [parser/types.ts:4](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L4)
+Defined in: [parser/types.ts:4](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L4)
diff --git a/docs/typedoc/type-aliases/JsonValue.md b/docs/typedoc/type-aliases/JsonValue.md
index f8a37f9b5f..af36d8edc0 100644
--- a/docs/typedoc/type-aliases/JsonValue.md
+++ b/docs/typedoc/type-aliases/JsonValue.md
@@ -2,4 +2,4 @@
> **JsonValue** = [`JsonPrimitive`](JsonPrimitive.md) \| [`JsonObject`](../interfaces/JsonObject.md) \| [`JsonArray`](JsonArray.md)
-Defined in: [parser/types.ts:5](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L5)
+Defined in: [parser/types.ts:5](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L5)
diff --git a/docs/typedoc/type-aliases/MatrixResponse.md b/docs/typedoc/type-aliases/MatrixResponse.md
index 17b307c022..5291e0d0b5 100644
--- a/docs/typedoc/type-aliases/MatrixResponse.md
+++ b/docs/typedoc/type-aliases/MatrixResponse.md
@@ -2,4 +2,4 @@
> **MatrixResponse** = [`MatrixRadioResponse`](../interfaces/MatrixRadioResponse.md) \| [`MatrixCheckboxResponse`](../interfaces/MatrixCheckboxResponse.md)
-Defined in: [parser/types.ts:590](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L590)
+Defined in: [parser/types.ts:590](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L590)
diff --git a/docs/typedoc/type-aliases/Response.md b/docs/typedoc/type-aliases/Response.md
index 0674e97822..39f6deb4f6 100644
--- a/docs/typedoc/type-aliases/Response.md
+++ b/docs/typedoc/type-aliases/Response.md
@@ -2,4 +2,4 @@
> **Response** = [`NumericalResponse`](../interfaces/NumericalResponse.md) \| [`ShortTextResponse`](../interfaces/ShortTextResponse.md) \| [`LongTextResponse`](../interfaces/LongTextResponse.md) \| [`LikertResponse`](../interfaces/LikertResponse.md) \| [`DropdownResponse`](../interfaces/DropdownResponse.md) \| [`SliderResponse`](../interfaces/SliderResponse.md) \| [`RadioResponse`](../interfaces/RadioResponse.md) \| [`CheckboxResponse`](../interfaces/CheckboxResponse.md) \| [`RankingResponse`](../interfaces/RankingResponse.md) \| [`ReactiveResponse`](../interfaces/ReactiveResponse.md) \| [`CustomResponse`](../interfaces/CustomResponse.md) \| [`MatrixResponse`](MatrixResponse.md) \| [`ButtonsResponse`](../interfaces/ButtonsResponse.md) \| [`TextOnlyResponse`](../interfaces/TextOnlyResponse.md) \| [`DividerResponse`](../interfaces/DividerResponse.md)
-Defined in: [parser/types.ts:945](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L945)
+Defined in: [parser/types.ts:945](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L945)
diff --git a/docs/typedoc/type-aliases/SkipConditions.md b/docs/typedoc/type-aliases/SkipConditions.md
index 358011d075..4217980409 100644
--- a/docs/typedoc/type-aliases/SkipConditions.md
+++ b/docs/typedoc/type-aliases/SkipConditions.md
@@ -2,7 +2,7 @@
> **SkipConditions** = ([`IndividualComponentSingleResponseCondition`](../interfaces/IndividualComponentSingleResponseCondition.md) \| [`IndividualComponentAllResponsesCondition`](../interfaces/IndividualComponentAllResponsesCondition.md) \| [`ComponentBlockCondition`](../interfaces/ComponentBlockCondition.md) \| [`RepeatedComponentBlockCondition`](../interfaces/RepeatedComponentBlockCondition.md))[]
-Defined in: [parser/types.ts:1603](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1603)
+Defined in: [parser/types.ts:1609](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1609)
The SkipConditions interface is used to define skip conditions. This is used to skip to a different component/block based on the response to a component or based on the number of correct/incorrect responses in a block. Skip conditions work recursively: if you have a nested block, the parent blocks' skip conditions will be considered when computing the skip logic.
diff --git a/docs/typedoc/type-aliases/Styles.md b/docs/typedoc/type-aliases/Styles.md
index d184bb2e99..631b7aff86 100644
--- a/docs/typedoc/type-aliases/Styles.md
+++ b/docs/typedoc/type-aliases/Styles.md
@@ -2,43 +2,43 @@
> **Styles** = `object`
-Defined in: [parser/types.ts:175](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L175)
+Defined in: [parser/types.ts:175](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L175)
## Properties
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `background?` | `string` | Background | [parser/types.ts:200](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L200) |
-| `backgroundColor?` | `string` | - | [parser/types.ts:201](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L201) |
-| `backgroundImage?` | `string` | - | [parser/types.ts:202](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L202) |
-| `backgroundPosition?` | `string` | - | [parser/types.ts:203](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L203) |
-| `backgroundSize?` | `string` | - | [parser/types.ts:204](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L204) |
-| `border?` | `string` | Border | [parser/types.ts:196](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L196) |
-| `borderRadius?` | `string` | - | [parser/types.ts:197](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L197) |
-| `bottom?` | `string` | - | [parser/types.ts:187](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L187) |
-| `color?` | `string` | Typography | [parser/types.ts:210](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L210) |
-| `filter?` | `string` | Filter | [parser/types.ts:207](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L207) |
-| `font?` | `string` | - | [parser/types.ts:211](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L211) |
-| `fontFamily?` | `string` | - | [parser/types.ts:212](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L212) |
-| `fontSize?` | `string` | - | [parser/types.ts:213](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L213) |
-| `fontStyle?` | `"normal"` \| `"italic"` \| `"oblique"` | - | [parser/types.ts:214](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L214) |
-| `fontWeight?` | `string` \| `number` | - | [parser/types.ts:215](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L215) |
-| `height?` | `string` | Sizing | [parser/types.ts:177](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L177) |
-| `left?` | `string` | - | [parser/types.ts:188](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L188) |
-| `letterSpacing?` | `string` | - | [parser/types.ts:219](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L219) |
-| `lineHeight?` | `string` \| `number` | - | [parser/types.ts:221](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L221) |
-| `margin?` | `string` | Spacing | [parser/types.ts:192](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L192) |
-| `maxHeight?` | `string` | - | [parser/types.ts:181](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L181) |
-| `maxWidth?` | `string` | - | [parser/types.ts:182](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L182) |
-| `minHeight?` | `string` | - | [parser/types.ts:179](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L179) |
-| `minWidth?` | `string` | - | [parser/types.ts:180](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L180) |
-| `padding?` | `string` | - | [parser/types.ts:193](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L193) |
-| `position?` | `"static"` \| `"relative"` \| `"absolute"` \| `"fixed"` \| `"sticky"` | Positioning | [parser/types.ts:185](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L185) |
-| `right?` | `string` | - | [parser/types.ts:189](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L189) |
-| `textAlign?` | `"start"` \| `"center"` \| `"end"` \| `"justify"` \| `"left"` \| `"right"` \| `"match-parent"` | - | [parser/types.ts:216](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L216) |
-| `textDecoration?` | `"none"` \| `"underline"` \| `"overline"` \| `"line-through"` \| `"underline-overline"` | - | [parser/types.ts:217](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L217) |
-| `textTransform?` | `"capitalize"` \| `"lowercase"` \| `"none"` \| `"uppercase"` | - | [parser/types.ts:218](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L218) |
-| `top?` | `string` | - | [parser/types.ts:186](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L186) |
-| `transform?` | `string` | Transform | [parser/types.ts:224](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L224) |
-| `width?` | `string` | - | [parser/types.ts:178](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L178) |
-| `wordSpacing?` | `string` | - | [parser/types.ts:220](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L220) |
+| `background?` | `string` | Background | [parser/types.ts:200](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L200) |
+| `backgroundColor?` | `string` | - | [parser/types.ts:201](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L201) |
+| `backgroundImage?` | `string` | - | [parser/types.ts:202](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L202) |
+| `backgroundPosition?` | `string` | - | [parser/types.ts:203](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L203) |
+| `backgroundSize?` | `string` | - | [parser/types.ts:204](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L204) |
+| `border?` | `string` | Border | [parser/types.ts:196](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L196) |
+| `borderRadius?` | `string` | - | [parser/types.ts:197](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L197) |
+| `bottom?` | `string` | - | [parser/types.ts:187](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L187) |
+| `color?` | `string` | Typography | [parser/types.ts:210](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L210) |
+| `filter?` | `string` | Filter | [parser/types.ts:207](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L207) |
+| `font?` | `string` | - | [parser/types.ts:211](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L211) |
+| `fontFamily?` | `string` | - | [parser/types.ts:212](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L212) |
+| `fontSize?` | `string` | - | [parser/types.ts:213](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L213) |
+| `fontStyle?` | `"normal"` \| `"italic"` \| `"oblique"` | - | [parser/types.ts:214](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L214) |
+| `fontWeight?` | `string` \| `number` | - | [parser/types.ts:215](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L215) |
+| `height?` | `string` | Sizing | [parser/types.ts:177](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L177) |
+| `left?` | `string` | - | [parser/types.ts:188](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L188) |
+| `letterSpacing?` | `string` | - | [parser/types.ts:219](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L219) |
+| `lineHeight?` | `string` \| `number` | - | [parser/types.ts:221](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L221) |
+| `margin?` | `string` | Spacing | [parser/types.ts:192](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L192) |
+| `maxHeight?` | `string` | - | [parser/types.ts:181](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L181) |
+| `maxWidth?` | `string` | - | [parser/types.ts:182](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L182) |
+| `minHeight?` | `string` | - | [parser/types.ts:179](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L179) |
+| `minWidth?` | `string` | - | [parser/types.ts:180](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L180) |
+| `padding?` | `string` | - | [parser/types.ts:193](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L193) |
+| `position?` | `"static"` \| `"relative"` \| `"absolute"` \| `"fixed"` \| `"sticky"` | Positioning | [parser/types.ts:185](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L185) |
+| `right?` | `string` | - | [parser/types.ts:189](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L189) |
+| `textAlign?` | `"start"` \| `"center"` \| `"end"` \| `"justify"` \| `"left"` \| `"right"` \| `"match-parent"` | - | [parser/types.ts:216](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L216) |
+| `textDecoration?` | `"none"` \| `"underline"` \| `"overline"` \| `"line-through"` \| `"underline-overline"` | - | [parser/types.ts:217](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L217) |
+| `textTransform?` | `"capitalize"` \| `"lowercase"` \| `"none"` \| `"uppercase"` | - | [parser/types.ts:218](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L218) |
+| `top?` | `string` | - | [parser/types.ts:186](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L186) |
+| `transform?` | `string` | Transform | [parser/types.ts:224](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L224) |
+| `width?` | `string` | - | [parser/types.ts:178](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L178) |
+| `wordSpacing?` | `string` | - | [parser/types.ts:220](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L220) |
diff --git a/docs/typedoc/type-aliases/UserBrowser.md b/docs/typedoc/type-aliases/UserBrowser.md
index 7c45488b7a..60ab5e338b 100644
--- a/docs/typedoc/type-aliases/UserBrowser.md
+++ b/docs/typedoc/type-aliases/UserBrowser.md
@@ -2,7 +2,7 @@
> **UserBrowser** = `object`
-Defined in: [parser/types.ts:77](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L77)
+Defined in: [parser/types.ts:77](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L77)
UserBrowser is used to define a minimum browser requirement for the study to run.
@@ -10,5 +10,5 @@ UserBrowser is used to define a minimum browser requirement for the study to run
| Property | Type | Description | Defined in |
| ------ | ------ | ------ | ------ |
-| `minVersion?` | `number` | Minimum version of the browser to support. | [parser/types.ts:81](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L81) |
-| `name` | `string` | Name of the browser. e.g. chrome, firefox, safari. | [parser/types.ts:79](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L79) |
+| `minVersion?` | `number` | Minimum version of the browser to support. | [parser/types.ts:81](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L81) |
+| `name` | `string` | Name of the browser. e.g. chrome, firefox, safari. | [parser/types.ts:79](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L79) |
diff --git a/docs/typedoc/type-aliases/UserDevice.md b/docs/typedoc/type-aliases/UserDevice.md
index c9453391d2..6207c93cb2 100644
--- a/docs/typedoc/type-aliases/UserDevice.md
+++ b/docs/typedoc/type-aliases/UserDevice.md
@@ -2,4 +2,4 @@
> **UserDevice** = `"desktop"` \| `"tablet"` \| `"mobile"`
-Defined in: [parser/types.ts:92](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L92)
+Defined in: [parser/types.ts:92](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L92)
diff --git a/docs/typedoc/type-aliases/UserInput.md b/docs/typedoc/type-aliases/UserInput.md
index 957d9175ab..b442b191b9 100644
--- a/docs/typedoc/type-aliases/UserInput.md
+++ b/docs/typedoc/type-aliases/UserInput.md
@@ -2,4 +2,4 @@
> **UserInput** = `"mouse"` \| `"touch"`
-Defined in: [parser/types.ts:102](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L102)
+Defined in: [parser/types.ts:102](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L102)
diff --git a/docs/typedoc/type-aliases/VegaComponent.md b/docs/typedoc/type-aliases/VegaComponent.md
index 9652af96c6..f8f4102f29 100644
--- a/docs/typedoc/type-aliases/VegaComponent.md
+++ b/docs/typedoc/type-aliases/VegaComponent.md
@@ -2,4 +2,4 @@
> **VegaComponent** = [`VegaComponentPath`](../interfaces/VegaComponentPath.md) \| [`VegaComponentConfig`](../interfaces/VegaComponentConfig.md)
-Defined in: [parser/types.ts:1312](https://github.com/revisit-studies/study/blob/1342408885dd25e64fbef15c6478d0a8d7cedb45/src/parser/types.ts#L1312)
+Defined in: [parser/types.ts:1318](https://github.com/revisit-studies/study/blob/72b8e5c4fa403736be782c35d94c86b3f785e056/src/parser/types.ts#L1318)
diff --git a/docusaurus.config.ts b/docusaurus.config.ts
index 33fd5d2dad..5ed2848e06 100644
--- a/docusaurus.config.ts
+++ b/docusaurus.config.ts
@@ -2,19 +2,22 @@ import { themes as prismThemes } from 'prism-react-renderer';
import type { Config } from '@docusaurus/types';
import type * as Preset from '@docusaurus/preset-classic';
+const enableGtag = process.env.ENABLE_GTAG === 'true';
+const isPreviewBuild = Boolean(process.env.BASE_URL);
+
const config: Config = {
title: 'Home | ReVISit',
tagline: 'reVISit: Reproducible and Powerful Visualization User Studies',
favicon: 'img/logos/favicon.svg',
url: 'https://revisit.dev',
- baseUrl: '/',
+ baseUrl: process.env.BASE_URL ?? '/',
trailingSlash: true,
organizationName: 'University of Utah', // Usually your GitHub org/user name.
projectName: 'ReVISit', // Usually your repo name.
- onBrokenLinks: 'throw',
+ onBrokenLinks: isPreviewBuild ? 'warn' : 'throw',
onBrokenAnchors: 'ignore',
markdown: {
hooks: {
@@ -51,7 +54,7 @@ const config: Config = {
},
lastVersion: 'current',
versions: {
- current: { label: 'v2.4.2', path: '' },
+ current: { label: 'v2.4.3', path: '' },
},
},
blog: {
@@ -61,10 +64,14 @@ const config: Config = {
theme: {
customCss: './src/css/custom.css',
},
- gtag: {
- trackingID: 'G-FLX70EGV5P',
- anonymizeIP: true,
- },
+ ...(enableGtag
+ ? {
+ gtag: {
+ trackingID: 'G-FLX70EGV5P',
+ anonymizeIP: true,
+ },
+ }
+ : {}),
} satisfies Preset.Options,
],
],
diff --git a/sidebars.ts b/sidebars.ts
index 395ea9ada2..dd3671328c 100644
--- a/sidebars.ts
+++ b/sidebars.ts
@@ -27,6 +27,19 @@ const sidebars: SidebarsConfig = {
'getting-started/installation',
'getting-started/your-first-study',
'getting-started/collecting-data',
+ {
+ type: 'category',
+ label: 'Tutorial',
+ link: {
+ type: 'doc',
+ id: 'tutorial/tutorial',
+ },
+ collapsed: true,
+ items: [
+ 'tutorial/config.json',
+ 'tutorial/replication-config.json',
+ ],
+ },
],
},
{
diff --git a/src/pages/community.md b/src/pages/community.md
index d3561526dd..50dfec7222 100644
--- a/src/pages/community.md
+++ b/src/pages/community.md
@@ -36,6 +36,10 @@ If you've used reVISit for your visualization research, we'd love to see it! Fil
## Community Activities
+- Tutorial at [IEEE VIS 2026](https://ieeevis.org/year/2026/welcome), Boston, USA, November 2026
+- Tutorial at [EuroVis 2026](https://eurovis.org.uk/), Nottingham, England, June 2026
+- Tutorial at [GI Center](https://www.gicentre.net/) and [University of Warwick](https://warwick.ac.uk/), (virtual), May 2026
+- Tutorial at [TU Wien](https://www.tuwien.at/en/), Austria (virtual), March 2026
- Open Hackathon at [University of Utah](https://www.utah.edu/), February 2026
- Open Hackathon at [TU Graz](https://www.tugraz.at/), Austria, November 2025
- Tutorial at [IEEE VIS 2025](https://ieeevis.org/year/2025/welcome), Vienna, November 2025
diff --git a/versioned_docs/version-v2.4.1/analysis/coding.md b/versioned_docs/version-v2.4.1/analysis/coding.md
deleted file mode 100644
index 29922bc7bc..0000000000
--- a/versioned_docs/version-v2.4.1/analysis/coding.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# Coding - Think Aloud
-
-[Think Aloud](../../designing-studies/think-aloud) coding lets you review and code what participants said during your study. You can edit transcripts, add tags, write notes, and play the audio in sync with the text.
-
-## Overview
-
-To open Think Aloud coding, go to the **Coding** tab under **Analysis**. The first participant and task with audio will load automatically.
-
-:::warning
-Coding is available only when using the Firebase storage engine. It also needs audio recordings to be turned on in your study setup (`"recordAudio" = true`). To populate transcripts automatically, install the [Google Cloud Speech-to-Text extension](https://extensions.dev/extensions/googlecloud/speech-to-text) in Firebase.
-:::
-
-
-
-Here are the main features:
-
-- **Transcripts**: Each line shows a small part of what the participant said. You can edit it, press **Enter** to split a line, or press **Backspace** to merge it with the line above. All changes are saved automatically.
-- **Text Tags**: Labels you can add to transcript lines to organize each segment and show what was said or how it was said.
-- **Annotations**: Short notes or comments about a transcript line. Use them for observations, thoughts, or extra context.
-- **Replay Timeline**: Follow along as the current line highlights in blue during playback. Clicking a line jumps the audio to that part, keeping text and sound in sync.
-- **Playback Speed**: Change how fast the audio plays, from **0.5×** to **8×**.
-- **Participant Tags**: Labels for participants that let you group or filter them.
-- **Task Tags**: Labels you can add to the current task to categorize it.
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/analysis/config.md b/versioned_docs/version-v2.4.1/analysis/config.md
deleted file mode 100644
index 59559195e8..0000000000
--- a/versioned_docs/version-v2.4.1/analysis/config.md
+++ /dev/null
@@ -1,67 +0,0 @@
-# Config
-
-The Config tab shows all the different versions of your study configuration that participants have used.
-
-## Overview
-
-Each time you change your `config.json` file and deploy it, reVISit creates a unique hash for that version.
-
-
-
-The Config table has several columns. The version column shows the identifier from your `studyMetadata.version` field (like `1.0.0` or `pilot`). The hash column shows a unique code based on your actual config content. If anything changes in your config, you get a new hash, even if you forget to update the version number. Hover over the info icon to see the full hash, or click the copy icon to copy it.
-
-The date column shows when you created that version (from `studyMetadata.date`). The time frame column shows when participants actually used it, from the first to the last participant. The participants column tells you how many people used each version.
-
-Update your `studyMetadata` in `config.json` every time you make changes:
-
-```json title="public/study-name/config.json"
-{
- "studyMetadata": {
- "version": "pilot",
- "date": "2026-02-17",
- ...
- }
-}
-```
-
-## View Config
-
-Click the view icon in the Actions column to see the full JSON for any config version. This opens a modal showing the complete configuration file, which is helpful when you need to check exactly what settings were used for a particular version.
-
-
-
-## Download Config
-
-Download individual configs by clicking the Download button in the Actions column. The file will be named `{studyId}_{hash}_config.json`, like `study_abc123_config.json`.
-
-
-
-For multiple configs, check the boxes next to the ones you want and click Download Configs at the top. This creates a zip file named `{studyId}_config.zip` with all the selected configs inside.
-Download configs to back up your study versions, share with collaborators, archive for publication, or compare changes outside reVISit.
-
-## Compare Config
-
-Select exactly two configs using the checkboxes, then click Compare Configs. You'll see a side-by-side view with red highlighting for removed content, green for added content, and no highlighting for unchanged content.
-
-
-
-:::warning
-Compare Config cannot track whitespace changes.
-:::
-
-## Filter Config
-
-The Config tab syncs with filters in other tabs. Config names are displayed as `{version}-{first 6 digits of hash}`, like `pilot-abc123`.
-
-
-
-Select "ALL" to see everyone, or choose specific versions to analyze just those participants. This is useful when you want to analyze only your final version, compare responses across versions, exclude pilot data, or analyze different study runs separately.
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/analysis/data-export.md b/versioned_docs/version-v2.4.1/analysis/data-export.md
deleted file mode 100644
index 58359e4149..0000000000
--- a/versioned_docs/version-v2.4.1/analysis/data-export.md
+++ /dev/null
@@ -1,186 +0,0 @@
-# Data Export and Basic Analysis
-
-## Download as Tidy CSV
-
-ReVISit allows you to export data in [Tidy](https://cran.r-project.org/web/packages/tidyr/vignettes/tidy-data.html) format for analysis in Python notebooks or R.
-
-The exported tidy data includes all the responses from the participants, including the participant ID, trial ID, trial order, and response ID. Additionally, we provide the parameters and correct answers that were set in the study configuration file (or by dynamic block). This data can be used to analyze the performance of participants, the accuracy of responses, and the time taken to complete the study.
-
-The tidy data is missing some data that is available in the JSON download, such as the provenance graphs. If you need this data, you can [download the JSON data](./#download-as-json) and parse it in your analysis platform, instead of using this Tidy data.
-
-### Steps to Download Data
-
-1. Navigate to the **Analysis** platform for the current study.
-
-2. Open the Participant View, then click on the **Download as tidy CSV** button. Here's a [direct link for the example below](https://revisit.dev/study/analysis/stats/example-brush-interactions/table).
-
-
-
-3. The **CSV Exporter** will open, where you can select the columns to export. A preview of the first five rows of the output CSV will be displayed.
-
-4. Once ready, click the **Download** button at the bottom right.
-
-
-
-After downloading the Tidy data, you can import it into your favorite analysis platform for further analysis. Below is an example of how to work with exported data from the [Interactive Selections in Scatterplot](https://revisit.dev/study/example-brush-interactions) study in R.
-
-:::info What is Tidy data format?
-Tidy data format is a structured approach to organizing tabular data where each variable is a column, each observation is a row, and each type of observational unit is a separate table.
-You may check more details [here](https://cran.r-project.org/web/packages/tidyr/vignettes/tidy-data.html).
-:::
-
-:::info
-If your study includes [audio recording](../../designing-studies/think-aloud), you can optionally include a transcript column in your tidy CSV export. This column contains the transcribed text from each trial, making it easy to analyze what participants said alongside their responses. You must be using Firebase as your storage engine and have the [Google Cloud Speech-to-Text extension](https://extensions.dev/extensions/googlecloud/speech-to-text) configured for your project.
-
-Downloading transcripts for large datasets can take significant time. If you're downloading data for **50 or more participants** with transcripts, you'll see a warning about potential delays. The system fetches transcripts with concurrency limits to avoid overwhelming the browser.
-:::
-
-## Example Workflow in R
-
-### 1. Install Necessary Packages
-
-```r
-list.of.packages <- c("ggplot2", "Hmisc")
-new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
-if(length(new.packages)) install.packages(new.packages)
-
-library(ggplot2)
-```
-
-### 2. Read and Preview the Data
-
-```r
-df <- read.csv("data/example-brush-interactions_all_tidy.csv")
-head(df)
-```
-
-| | participantId | trialId | trialOrder | responseId |
-|---|--------------------------------------|---------------|------------|--------------|
-| 1 | 017ab8bd-33d1-4f95-ac07-5fedef30928a | introduction | 0 | prolificId |
-| 2 | 017ab8bd-33d1-4f95-ac07-5fedef30928a | consent | 1 | signature |
-| 3 | 017ab8bd-33d1-4f95-ac07-5fedef30928a | consent | 1 | accept |
-| 4 | 017ab8bd-33d1-4f95-ac07-5fedef30928a | paintBrush_q1 | 5 | response |
-| 5 | 017ab8bd-33d1-4f95-ac07-5fedef30928a | paintBrush_q2 | 6 | max-response |
-
-### 3. Filter Data for Task `q2`
-
-```r
-q2 <- subset(df, grepl("_q2", trialId) & status == "completed")
-q2$isCorrect <- ifelse(q2$answer == q2$correctAnswer, 1, 0)
-```
-
-### 4. Create a Violin Plot
-
-The plot displays correct answers on the right and incorrect answers on the left.
-
-```r
-ggplot(q2, aes(x = isCorrect, y = trialId)) +
- geom_violin(aes(fill = trialId), color = "#888", alpha = 0.7) +
- stat_summary(fun.data = "mean_cl_boot", colour = "#333", size = 0.5, alpha=0.5) +
- theme_minimal() +
- theme(legend.position = "none") +
- labs(
- title = "Violin Plot for q2 (Finding most/least value)",
- )
-```
-
-
-
-We find accuracy using paint brush technique is much less than that of the others.
-
-### 5. Export the generated plot.
-
-```r
-ggsave("plot.pdf", width = 5, height = 2, units = "in")
-```
-## Download as JSON
-
-### Steps to Download Data
-
-1. Navigate to the **Analysis** platform for the current study.
-
-2. Open the Participant View, then click on the **Download as JSON** button.
-
-
-
-## Download Audio
-
-There are two ways to download audio files if you have enabled `recordAudio: true` in your study. For applying Think Aloud in your study, please visit [Think Aloud](../../designing-studies/think-aloud).
-
-### Download Participants' Audio
-
-1. Navigate to the **Analysis** platform for the current study.
-
-2. Open the **Participant View**, then click on the **Download participants audio** button.
-
-
-
-:::note
-To download audio from specific participants, select the participants in the table.
-:::
-
-### Download Single Participant's Task Audio
-
-1. Navigate to the **Analysis** platform for the current study.
-
-2. Open the **Participant View**, then expand the participant’s timeline by clicking the expand button.
-
-
-3. Click on the task.
-
-
-3. Click on the **Download Audio** button.
-
-
-:::info
-If you are using Firebase with the [Google Cloud Speech-to-Text extension](https://extensions.dev/extensions/googlecloud/speech-to-text) configured, it will download the transcript of the audio file as well.
-:::
-
-## Download Screen Recording
-
-There are two ways to download screen recording video files if you have enabled `recordScreen: true` in your study. For applying screen recording feature in your study, please visit [Record Screen](../../designing-studies/record-screen).
-
-### Download Participants' Screen Recording
-
-1. Navigate to the **Analysis** platform for the current study.
-
-2. Open the **Participant View**, then click on the **Download participants' screen recording** button.
-
-
-
-:::note
-To download screen recording from specific participants, select the participants in the table.
-:::
-
-### Download Single Participant's Screen Recording
-
-1. Navigate to the **Analysis** platform for the current study.
-
-2. Open the **Participant View**, then expand the participant’s timeline by clicking the expand button.
-
-
-3. Click on the task.
-
-
-3. Click on the **Download Screen Recording** button.
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/analysis/data-management.md b/versioned_docs/version-v2.4.1/analysis/data-management.md
deleted file mode 100644
index 92115bdf6e..0000000000
--- a/versioned_docs/version-v2.4.1/analysis/data-management.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# Data Management
-
-The reVISit analytics platform provides a robust way to manage, backup, and restore your user data.
-
-## Snapshots
-
-A **snapshot** in the data management platform is an exact copy of the current state of a particular study dataset. This includes all the data gathered from each participant as well as the current study assignment sequence. To create a snapshot, you can navigate to the "Manage" tab within a particular study's analytics interface and click "Snapshot" in the "Create A Snapshot" section. When a snapshot is created, you will see the name of the snapshot in the "Snapshots" list below. This does not remove the data from the current study dataset.
-
-
-
-## Archiving Data
-
-When you archive your data, it first creates a snapshot of the current study data. Then, the current study data is completely removed -- allowing you to essentially "reset" the study while creating a backup copy to restore at a later point.
-
-## Restoring a Snapshot
-
-At any point, the current study data can be restored to a snapshot. In your snapshot list, you will see a "restore" icon which will allow you to do this. When you restore a snapshot, a new snapshot of the current study data will first be created. All data from the snapshot being restored is then copied back into the current study data. Your snapshot will _not_ be removed.
-
-## Deleting a Snapshot
-
-A snapshot can be deleted at any time in order to free up space in your Firebase application. Simply click the "delete" icon next to any snapshot and follow the onscreen instructions to remove it.
-
-:::danger
-All data deletion is permanent. Once deleted, you will not be able to view or download this data.
-:::
-
-## Deleting Live Data
-
-You can delete the live study data at any point. Note that this delete functionality will _not_ create a snapshot of the data first; it will instead completely clear the data for this individual study.
-
-:::danger
-All data deletion is permanent. Once deleted, you will not be able to view or download this data.
-:::
-
-:::info
-Whenever live data is deleted, reVISit will automatically generate a new configuration file for the upcoming participant. Thus, if you go into your Firebase UI after deleting your live data, you will still see the `configs/` folder with one configuration inside.
-:::
diff --git a/versioned_docs/version-v2.4.1/analysis/img/coding/coding.png b/versioned_docs/version-v2.4.1/analysis/img/coding/coding.png
deleted file mode 100644
index da28fb1d52..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/coding/coding.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/config/compare-config.png b/versioned_docs/version-v2.4.1/analysis/img/config/compare-config.png
deleted file mode 100644
index 665ef492d6..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/config/compare-config.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/config/config.png b/versioned_docs/version-v2.4.1/analysis/img/config/config.png
deleted file mode 100644
index 14aeaa2ac6..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/config/config.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/config/download-config.png b/versioned_docs/version-v2.4.1/analysis/img/config/download-config.png
deleted file mode 100644
index 2ac34cf164..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/config/download-config.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/config/filter-config.png b/versioned_docs/version-v2.4.1/analysis/img/config/filter-config.png
deleted file mode 100644
index 88534254e9..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/config/filter-config.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/config/view-config.png b/versioned_docs/version-v2.4.1/analysis/img/config/view-config.png
deleted file mode 100644
index 5135f4d0a3..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/config/view-config.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/data-export/audio-export-1.png b/versioned_docs/version-v2.4.1/analysis/img/data-export/audio-export-1.png
deleted file mode 100644
index f9b7a5ad47..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/data-export/audio-export-1.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/data-export/audio-export-2.png b/versioned_docs/version-v2.4.1/analysis/img/data-export/audio-export-2.png
deleted file mode 100644
index 9be978846e..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/data-export/audio-export-2.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/data-export/audio-export-3.png b/versioned_docs/version-v2.4.1/analysis/img/data-export/audio-export-3.png
deleted file mode 100644
index f62d5af1e5..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/data-export/audio-export-3.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/data-export/audio-export-all.png b/versioned_docs/version-v2.4.1/analysis/img/data-export/audio-export-all.png
deleted file mode 100644
index db075ba237..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/data-export/audio-export-all.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/data-export/json-export.png b/versioned_docs/version-v2.4.1/analysis/img/data-export/json-export.png
deleted file mode 100644
index 60dbcfb7c6..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/data-export/json-export.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/data-export/r-violin-plot.png b/versioned_docs/version-v2.4.1/analysis/img/data-export/r-violin-plot.png
deleted file mode 100644
index ef85603f79..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/data-export/r-violin-plot.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/data-export/screen-recording-export-1.png b/versioned_docs/version-v2.4.1/analysis/img/data-export/screen-recording-export-1.png
deleted file mode 100644
index 8fa2cc3a15..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/data-export/screen-recording-export-1.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/data-export/screen-recording-export-2.png b/versioned_docs/version-v2.4.1/analysis/img/data-export/screen-recording-export-2.png
deleted file mode 100644
index 9cad4fdd6f..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/data-export/screen-recording-export-2.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/data-export/screen-recording-export-3.png b/versioned_docs/version-v2.4.1/analysis/img/data-export/screen-recording-export-3.png
deleted file mode 100644
index b045430571..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/data-export/screen-recording-export-3.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/data-export/screen-recording-export-all.png b/versioned_docs/version-v2.4.1/analysis/img/data-export/screen-recording-export-all.png
deleted file mode 100644
index cf4839aa32..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/data-export/screen-recording-export-all.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/data-export/tidy-export-csv-exporter.png b/versioned_docs/version-v2.4.1/analysis/img/data-export/tidy-export-csv-exporter.png
deleted file mode 100644
index ca65e2f3d1..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/data-export/tidy-export-csv-exporter.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/data-export/tidy-export.png b/versioned_docs/version-v2.4.1/analysis/img/data-export/tidy-export.png
deleted file mode 100644
index 5061e6fb2f..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/data-export/tidy-export.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/data-management.png b/versioned_docs/version-v2.4.1/analysis/img/data-management.png
deleted file mode 100644
index 91dac7353d..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/data-management.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/live-monitor/live-monitor-in-progress-dynamic.png b/versioned_docs/version-v2.4.1/analysis/img/live-monitor/live-monitor-in-progress-dynamic.png
deleted file mode 100644
index 7d8f3f28d1..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/live-monitor/live-monitor-in-progress-dynamic.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/live-monitor/live-monitor-in-progress.png b/versioned_docs/version-v2.4.1/analysis/img/live-monitor/live-monitor-in-progress.png
deleted file mode 100644
index cc7a1139c7..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/live-monitor/live-monitor-in-progress.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/live-monitor/live-monitor-reconnect.png b/versioned_docs/version-v2.4.1/analysis/img/live-monitor/live-monitor-reconnect.png
deleted file mode 100644
index 8d6dbd2255..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/live-monitor/live-monitor-reconnect.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/live-monitor/live-monitor.png b/versioned_docs/version-v2.4.1/analysis/img/live-monitor/live-monitor.png
deleted file mode 100644
index f099da5627..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/live-monitor/live-monitor.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/participant-replay/participant-replay-incomplete.png b/versioned_docs/version-v2.4.1/analysis/img/participant-replay/participant-replay-incomplete.png
deleted file mode 100644
index 1514b2a4dc..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/participant-replay/participant-replay-incomplete.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/participant-replay/participant-replay-single.png b/versioned_docs/version-v2.4.1/analysis/img/participant-replay/participant-replay-single.png
deleted file mode 100644
index eed9d91e79..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/participant-replay/participant-replay-single.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/participant-replay/participant-replay-timestamp.png b/versioned_docs/version-v2.4.1/analysis/img/participant-replay/participant-replay-timestamp.png
deleted file mode 100644
index 2f85a548d8..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/participant-replay/participant-replay-timestamp.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/participant-replay/participant-replay.png b/versioned_docs/version-v2.4.1/analysis/img/participant-replay/participant-replay.png
deleted file mode 100644
index 17a1c627ce..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/participant-replay/participant-replay.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/participant-view.png b/versioned_docs/version-v2.4.1/analysis/img/participant-view.png
deleted file mode 100644
index 3b1d0e5d20..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/participant-view.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/revisit-modes/modes-study-card.png b/versioned_docs/version-v2.4.1/analysis/img/revisit-modes/modes-study-card.png
deleted file mode 100644
index 5248fcce81..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/revisit-modes/modes-study-card.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/revisit-modes/modes.png b/versioned_docs/version-v2.4.1/analysis/img/revisit-modes/modes.png
deleted file mode 100644
index d4fb752563..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/revisit-modes/modes.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/stage-management/stage-management-add-1.png b/versioned_docs/version-v2.4.1/analysis/img/stage-management/stage-management-add-1.png
deleted file mode 100644
index 3b9c35b677..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/stage-management/stage-management-add-1.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/stage-management/stage-management-add-2.png b/versioned_docs/version-v2.4.1/analysis/img/stage-management/stage-management-add-2.png
deleted file mode 100644
index e8e6e28219..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/stage-management/stage-management-add-2.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/stage-management/stage-management-edit-1.png b/versioned_docs/version-v2.4.1/analysis/img/stage-management/stage-management-edit-1.png
deleted file mode 100644
index f5c439922a..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/stage-management/stage-management-edit-1.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/stage-management/stage-management-edit-2.png b/versioned_docs/version-v2.4.1/analysis/img/stage-management/stage-management-edit-2.png
deleted file mode 100644
index cf633b838b..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/stage-management/stage-management-edit-2.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/stage-management/stage-management-filter.png b/versioned_docs/version-v2.4.1/analysis/img/stage-management/stage-management-filter.png
deleted file mode 100644
index 992862bcd4..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/stage-management/stage-management-filter.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/stage-management/stage-management-select.png b/versioned_docs/version-v2.4.1/analysis/img/stage-management/stage-management-select.png
deleted file mode 100644
index d66a59c87b..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/stage-management/stage-management-select.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/study-card.png b/versioned_docs/version-v2.4.1/analysis/img/study-card.png
deleted file mode 100644
index f19314cb0d..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/study-card.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/study-summary/clean-time-warning.png b/versioned_docs/version-v2.4.1/analysis/img/study-summary/clean-time-warning.png
deleted file mode 100644
index d0e4980041..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/study-summary/clean-time-warning.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/study-summary/study-summary-component.png b/versioned_docs/version-v2.4.1/analysis/img/study-summary/study-summary-component.png
deleted file mode 100644
index a98e1d36aa..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/study-summary/study-summary-component.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/study-summary/study-summary-overview.png b/versioned_docs/version-v2.4.1/analysis/img/study-summary/study-summary-overview.png
deleted file mode 100644
index abd03cfdc3..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/study-summary/study-summary-overview.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/study-summary/study-summary-response.png b/versioned_docs/version-v2.4.1/analysis/img/study-summary/study-summary-response.png
deleted file mode 100644
index 519479f41b..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/study-summary/study-summary-response.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/study-summary/study-summary.png b/versioned_docs/version-v2.4.1/analysis/img/study-summary/study-summary.png
deleted file mode 100644
index d136fedd96..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/study-summary/study-summary.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/img/trial-stats.png b/versioned_docs/version-v2.4.1/analysis/img/trial-stats.png
deleted file mode 100644
index 3bb5d9e73e..0000000000
Binary files a/versioned_docs/version-v2.4.1/analysis/img/trial-stats.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/analysis/index.md b/versioned_docs/version-v2.4.1/analysis/index.md
deleted file mode 100644
index 78e9cf8a6f..0000000000
--- a/versioned_docs/version-v2.4.1/analysis/index.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ReVISit Analysis Platform
-
-ReVISit provides an analysis platform for researchers to analyze their data.
-This platform is designed to allow researchers to quickly monitor their experimental data without needing to download it or perform analysis elsewhere.
-The platform currently includes the [Dashboard](./study-card), a place to check experiments at a glance, and the [Participant View](./participant-view), where researchers can inspect each record in table format.
-
-
-import DocCardList from '@theme/DocCardList';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/analysis/live-monitor.md b/versioned_docs/version-v2.4.1/analysis/live-monitor.md
deleted file mode 100644
index a1ac90c8d3..0000000000
--- a/versioned_docs/version-v2.4.1/analysis/live-monitor.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# Live Monitor
-
-The Live Monitor gives you a real-time view of participant progress throughout your study. It automatically updates using Firebase listeners, so you’ll see changes the moment they happen — no need to refresh the page.
-
-Check out the [Live Monitor Demo](https://revisit.dev/study/analysis/stats/demo-dynamic/live-monitor).
-
-:::warning
-Live Monitor currently works only with the Firebase storage engine and requires an active internet connection.
-:::
-
-## Real-Time Updates
-
-To get started, open the Live Monitor tab under Analysis and check the connection indicator to see whether you’re connected, reconnecting, or disconnected.
-Hovering over the connection icon displays the last time the data was updated.
-
-
-
-If your internet connection temporarily drops, the Live Monitor will automatically reconnect once you’re back online. You can also click the Reconnect button to refresh the connection manually.
-
-
-
-## Tracking Participant Progress
-
-Participants are grouped by their status, and you can expand or collapse sections as needed. You can also filter participants by status or stage using the controls at the top. They are sorted by creation time, with the most recent participants appearing first.
-
-For participants still in progress, question blocks show task status: green for completed, gray for unanswered, teal for dynamic study items. Hovering over a question block displays the task name in a tooltip.
-
-
-
-If your study uses a [dynamic block](../../typedoc/interfaces/DynamicBlock/), you’ll see a "?" instead of a percentage in the progress indicator. This happens because the total number of tasks in a dynamic study isn’t fixed and can’t be calculated ahead of time.
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/analysis/participant-replay.md b/versioned_docs/version-v2.4.1/analysis/participant-replay.md
deleted file mode 100644
index a125f400bc..0000000000
--- a/versioned_docs/version-v2.4.1/analysis/participant-replay.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# Participant Replay
-
-The participant replay can be used for an overview of each participant's study.
-
-
-
-To view the provenance or audio replay for a single participant, click the expand icon to open their data row, then select a task on the timeline.
-
-
-
-Task replay is intended to be used with provenance, audio recording, or both. Audio and provenance are synced, and the provenance data is used to rehydrate the task stimulus, showing researchers what participants saw while taking the study.
-
-:::info
-If a participant hasn't completed any tasks yet, you'll see a warning message indicating that no task data is available for replay. This typically happens when a participant is still in progress or dropped out before submitting any responses.
-
-:::
-
-If you’d like to link to a specific timestamp in the replay, you can use the `&t` query parameter in your URL.
-For example, this link will jump to 40 seconds in the replay: https://revisit.dev/study/example-brush-interactions/LzE2MTl4ZVRMTk5nSFlNYmd1ZDhjZz09?participantId=e4377e49-0f35-461a-bd9c-c31523599db7&t=40s
-
-
-
-You can specify time in different formats:
-- Milliseconds: `&t=1000`
-- Seconds: `&t=1s`, `&t=70s`
-- Minutes: `&t=2m`, `&t=10m30s`
-- Hours: `&t=1h30m`
-
-If the entered time exceeds the replay’s maximum length, it will automatically be replaced with the maximum available time in milliseconds.
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/analysis/participant-view.md b/versioned_docs/version-v2.4.1/analysis/participant-view.md
deleted file mode 100644
index 28ab70b89e..0000000000
--- a/versioned_docs/version-v2.4.1/analysis/participant-view.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# Participant View
-
-The participant view displays the user data of a study in a table format. It is designed to allow researchers to inspect each record in detail.
-
-
-
-Each row represents a record of a participant in the study. It includes the participant's ID, status indicator, stage, metadata (resolution, user agent, IP address, language), time they spent, and count of correct answers.
-For each trial, all question IDs and corresponding answers are displayed in the same cell. The time the participant spent on the trial is shown in a separate cell.
-
-Right beside the participant's ID, the green checkmark icon indicates that this participant has completed the study, while the yellow circular icon indicates that this participant is still in progress.
-
-You can quickly navigate to different studies by using the study switcher in the top right corner.
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/analysis/revisit-modes.md b/versioned_docs/version-v2.4.1/analysis/revisit-modes.md
deleted file mode 100644
index 30461a6ae7..0000000000
--- a/versioned_docs/version-v2.4.1/analysis/revisit-modes.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# ReVISit Modes
-
-Each of the reVISit studies has various modes which enable different features. These can be managed in the "Manage" tab of a particular study in our analysis interface. You can also view the current mode status from the study card.
-
-
-
-Here we give a brief introduction to these modes. Check out our [Analysis Platform Documentation](../../analysis) for more information on managing your data and studies. Additionally, you can find our [best practices](../../data-and-deployment/lifecycle-of-revisit) for using these modes to manage the lifecycle of your reVISit study.
-
-
-
-## Data Collection
-
-With Data Collection enabled, all data that is captured by participants will be stored either locally or in your cloud database (dependent on your currently specified storage engine). You can check out our [data management documentation](../../analysis/data-management) to learn how to manage participants, create backup datasets, and more.
-
-Disabling data collection on a particular study will cause the user to see a `DEMO MODE` icon in the upper right hand corner. This is to alert users that their data is not currently being collected.
-
-## Development Mode
-
-When the development mode is enabled, any user will be able to access the study's "study browser". This allows users to move between any two components in the study freely. This is especially useful when you are disseminating your study after all data collection has completed and you'd like to share your study with the broader public.
-
-## Share Data and Make Analytics Interface Public
-
-The analytics interface provides administrators with a way to view, download, and manage study data. When enabling this mode, all the data for this particular study will be viewable by the broader public. This means that anybody can view the participants, see the answers given, and download all the data.
-
-:::note
-If you are using older version mode names, reVISit will automatically update the old mode names to the new mode names in storage engines.
-:::
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/analysis/stage-management.md b/versioned_docs/version-v2.4.1/analysis/stage-management.md
deleted file mode 100644
index 66a1fa8b85..0000000000
--- a/versioned_docs/version-v2.4.1/analysis/stage-management.md
+++ /dev/null
@@ -1,59 +0,0 @@
-# Stage Management
-
-## Overview
-
-Stage Management helps you organize participants into different parts of your study. It’s useful for studies that have multiple sections or happen over time. Using stages makes it easier to track, filter, and analyze participants based on when they took part in the study, either as a pilot participant or during different phases of data collection.
-
-## Getting Started
-
-Go to the **Manage** tab under **Analysis** and open the **Stage Management** section.
-
-:::info
-All studies start with a **DEFAULT** stage, which cannot be removed. The default color is orange (`#F05A30`), but you can change it if you want.
-:::
-
-## Adding a New Stage
-
-1. Click the **Add New Stage** button.
-
-
-
-2. Enter a stage name and pick a color. You can type a color code or choose one from the color picker.
-
-
-
-3. Click the green check mark to save.
-
-:::warning
-Stage names cannot be `DEFAULT`, `ALL`, or `N/A`.
-:::
-
-## Setting the Current Stage
-
-The current stage determines where all new participants will be added. To set a stage as the current one, simply click the radio button next to the stage you want. Once selected, any participants added afterward will automatically be placed in this stage.
-
-
-
-## Changing Stage Colors
-
-Each stage has a color to help you identify it in the analysis views. To change a stage color:
-
-1. Click the edit icon.
-
-
-
-2. Pick a new color or enter a color code.
-
-3. Click the green check mark to save.
-
-
-
-:::warning
-Stage names cannot be changed after you create them, but you can always change the color.
-:::
-
-## Stage Filter in Participant View
-
-Each participant’s stage is shown in the table, making it easy to see and group participants. You can filter by stage using the filter at the top and select one or more stages.
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/analysis/study-card.md b/versioned_docs/version-v2.4.1/analysis/study-card.md
deleted file mode 100644
index 7ee16374ed..0000000000
--- a/versioned_docs/version-v2.4.1/analysis/study-card.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Study Card
-
-The study card is the access point for both the study and analysis platform. It provides an overview of participants status of each of your studies.
-
-The participants' status shows:
-- **Completed** - the number of participants who have completed the experiment
-- **In-Progress** - the number of participants who started but have not completed the experiment
-- **Rejected** - the number of participants who were rejected
-
-The activity time range shows the start date of the study and the date the last participant finished.
-
-Click on the "Analyze & Manage Study" button, you will be redirected to the study summary of analysis platform.
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/analysis/study-summary.md b/versioned_docs/version-v2.4.1/analysis/study-summary.md
deleted file mode 100644
index f557adc0a3..0000000000
--- a/versioned_docs/version-v2.4.1/analysis/study-summary.md
+++ /dev/null
@@ -1,52 +0,0 @@
-# Study Summary
-
-The study summary gives users a quick overview of their study at a glance. It provides a comprehensive overview of their study data in a single, easy-to-understand dashboard.
-
-The summary is organized into three main sections: Overview Statistics, Component Statistics, and Response Statistics. At the top, participant filters allow you to filter the analysis by including or excluding completed, in-progress, or rejected participants. A stage selector is also available for filtering different study stages. For more details on stage management, see [here](./../stage-management).
-
-
-
-## Overview Statistics
-
-This section shows key numbers about the study.
-
-
-
-- Total Participants – total number of people in the study
-- Completed / In-Progress / Rejected – counts of participants by status (green = completed, yellow = in-progress, red = rejected)
-- Start Date / End Date – when the first participant started and the last one finished the study
-- Average Time – average time participants spent on the study
-- Average Clean Time – average time spent without browsing away from the study
-- Correctness – overall percentage of correct answers
-
-:::warning
-Window visibility events are sometimes unreliable and may not fire consistently in certain browsers or situations. When clean time cannot be calculated reliably, the system sets the value to -1 to indicate an issue with the calculation.
-
-
-
-For example, a warning icon may appear next to Average Clean Time in the Overview Statistics. Hovering over the clean time value shows how many data points were excluded from the overall clean time calculation.
-:::
-
-## Component Statistics
-
-
-
-This section shows each part of the study in a table you can sort, filter, and search.
-
-- Component – name of the study part
-- Participants – number of people who did this part
-- Average Time – average time spent
-- Average Clean Time – average time without browsing away
-- Correctness – percentage of correct answers (shows N/A if the component has no correct answer)
-
-## Response Statistics
-
-
-
-This section provides details for each question, with each row representing a single question.
-
-- Component – part of the study with this question
-- Type – kind of response (see [BaseResponse](../../typedoc/interfaces/BaseResponse) for all response types)
-- Question – question prompt
-- Options – answer options given to the participants
-- Correctness – percentage of correct answers
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/analysis/trial-stats.md b/versioned_docs/version-v2.4.1/analysis/trial-stats.md
deleted file mode 100644
index 2dad84d35f..0000000000
--- a/versioned_docs/version-v2.4.1/analysis/trial-stats.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Trial Stats
-
-Once you click the Trial Stats tab, you will see this page that provides time distribution and answer distribution of each trial.
-
-For example, the image below shows the result from an example study. The left side is the list of trials.
-The right side shows the time distribution and answer distribution of the selected trial, along with the related config.
-
-Clicking on a component shows the statistics for that specific component. Note that statistics are not available for the end component.
-
-
-
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/connecting-to-cloud-database.md b/versioned_docs/version-v2.4.1/data-and-deployment/connecting-to-cloud-database.md
deleted file mode 100644
index 7235ceafb0..0000000000
--- a/versioned_docs/version-v2.4.1/data-and-deployment/connecting-to-cloud-database.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Connecting to a Cloud Database
-
-ReVISit is inherently a serverless program. As such, we developed a storage engine architecture in order to store the data that is gathered from users as they move through the study. While you can test the program locally using the browser's local storage, you will need to set up some sort of cloud database in order to save study participant data. Our intention is that those who create the study have full control over the data that is generated by participants — no data is ever linked back to the reVISit repository or those who have contributed to its creation. See the Deployment section for more information about deploying your study to GitHub.io once the connection to Firebase has been set up.
-
-We provide multiple storage engines and an abstract class that you can extend to create your own storage engine. There are two cloud databases that reVISit supports out of the box: Firebase and Supabase. Firebase is a Google product that provides a real-time NoSQL database and storage solution, while Supabase is an open-source alternative that provides similar functionality that can be self-hosted (perfect for researchers who operate under strict data privacy regulations).
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/connecting-to-external-platform.md b/versioned_docs/version-v2.4.1/data-and-deployment/connecting-to-external-platform.md
deleted file mode 100644
index 8bd5ae3bce..0000000000
--- a/versioned_docs/version-v2.4.1/data-and-deployment/connecting-to-external-platform.md
+++ /dev/null
@@ -1,137 +0,0 @@
-# Connecting with External Participant Platforms
-
-ReVISit makes it easy to connect with participant management platforms such as Prolific, SONA Systems, and other custom services. ReVISit can automatically collect participant IDs from study links, display those IDs inside the study, and redirect participants to a platform-specific return link after completion.
-
-## General Integration
-
-### Capture Participant ID from URL
-
-When participants are recruited through a third-party platform, their unique ID should be appended to the study URL. ReVISit supports automatic capture of that ID using the `urlParticipantIdParam` field in the `uiConfig`.
-
-```json title="public/study-name/config.json"
-"uiConfig": {
- "urlParticipantIdParam": "PARTICIPANT_ID"
- ...
-}
-```
-
-When a participant visits the following link, reVISit will store abc123 as their participant ID for the duration of the study:
-```
-https://revisit.dev/study/studyName?PARTICIPANT_ID=abc123
-```
-
-### Display the ID in the Study
-You can use the captured participant ID as a response value by adding the paramCapture field to a `shortText` response. This automatically fills in the participant’s ID from the URL and disables editing to prevent manual tampering.
-
-```json title="public/study-name/config.json"
-"introduction": {
- "type": "markdown",
- "path": "myPath/path",
- "response": [
- {
- "id": "participantId",
- "prompt": "Please enter your Participant ID",
- "required": true,
- "location": "belowStimulus",
- "type": "shortText",
- "placeholder": "Participant ID",
- "paramCapture": "PARTICIPANT_ID"
- }
- ]
-},
-```
-
-### Redirecting back with Participant ID at Study End
-At the end of the study, you typically need to return the participant to the platform to confirm their participation and issue credit or payment. Use the `studyEndMsg` field in `uiConfig` to display a final message with a return link. Use `{PARTICIPANT_ID}` as a placeholder. ReVISit will replace this with the actual ID from the URL.
-
-```json title="public/study-name/config.json"
-"uiConfig": {
- "studyEndMsg": "Thank you for completing the study! Return to this link to receive credit: [https://your-platform.com/complete?participant_id={PARTICIPANT_ID}](https://your-platform.com/complete?participant_id={PARTICIPANT_ID})",
- ...
-}
-```
-
-## Prolific
-[Prolific](https://prolific.com) is a popular platform for recruiting crowd-sourced participants.
-
-When you create a prolific study and give it the url of your deployed reVISit study site, it will add multiple url parameters to the link. For our purposes, we want to store the `PROLIFIC_PID`. To do this, in the `uiConfig` object of your config file, add the key
-
-```json title="public/study-name/config.json"
-"uiConfig": {
- "urlParticipantIdParam": "PROLIFIC_PID"
- ...
-}
-```
-
-To automatically access the `PROLIFIC_PID`, use the `paramCapture` field inside of your response. The below example will automatically answer the id field in the introduction with the linked `PROLIFIC_PID`, and will not allow the participant to change it. This way, you are guaranteed to properly keep track of your participants without relying on them to enter their prolific id.
-
-```json title="public/study-name/config.json"
-"introduction": {
- "type": "markdown",
- "path": "myPath/path",
- "response": [
- {
- "id": "prolificId",
- "prompt": "Please enter your Prolific ID",
- "required": true,
- "location": "belowStimulus",
- "type": "shortText",
- "placeholder": "Prolific ID",
- "paramCapture": "PROLIFIC_PID"
- }
- ]
-},
-```
-
-When the study is over, you want to redirect participant back to prolific, so they can be confirmed as finished and paid. This is also done in the `uiConfig` via the `studyEndMsg`, and you should use the link specific to your study that prolific provides.
-
-
-
-Here's an example:
-
-```json title="public/study-name/config.json"
-"uiConfig": {
- "urlParticipantIdParam": "PROLIFIC_PID",
- "studyEndMsg": "Thank you for completing the study! Return to Prolific: [https://app.prolific.com/submissions/complete?cc=studyID](https://app.prolific.com/submissions/complete?cc=studyID)"
-}
-```
-
-## SONA
-SONA Systems is another commonly used recruitment platform in academic research. SONA can append a unique participant ID `SURVEY_CODE` to the study URL. To ensure participants are redirected properly at the end of the study, you can configure reVISit as follows:
-
-```json title="public/study-name/config.json"
-"uiConfig": {
- "urlParticipantIdParam": "SURVEY_CODE",
- "studyEndMsg": "Thank you for completing the study! Return to SONA to receive credit: [https://yourschool.sonasystems.com/webstudy_credit.aspx?experiment_id=...&credit_token=...&survey_code={PARTICIPANT_ID}](https://yourschool.sonasystems.com/webstudy_credit.aspx?experiment_id=...&credit_token=...&survey_code={PARTICIPANT_ID})"
-}
-```
-The `{PARTICIPANT_ID}` will be replaced with the actual `SURVEY_CODE` value from the URL.
-Just like with other platforms, you can display the SONA ID in the introduction or elsewhere in the study using:
-
-```json title="public/study-name/config.json"
-"introduction": {
- "type": "markdown",
- "path": "myPath/path",
- "response": [
- {
- "id": "sonaSurveyCode",
- "prompt": "Please enter your SONA Survey Code",
- "required": true,
- "location": "belowStimulus",
- "type": "shortText",
- "placeholder": "SONA Survey Code",
- "paramCapture": "SURVEY_CODE"
- }
- ]
-},
-```
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/deploying-to-static-website.md b/versioned_docs/version-v2.4.1/data-and-deployment/deploying-to-static-website.md
deleted file mode 100644
index eec10778c0..0000000000
--- a/versioned_docs/version-v2.4.1/data-and-deployment/deploying-to-static-website.md
+++ /dev/null
@@ -1,130 +0,0 @@
-# Deploying To a Static Website
-
-## Deploying using GitHub
-
-Deploying your study should be relatively simple. We include a GitHub action that will build your study and deploy it to GitHub pages. The only item that the user must adjust is in the `.env` file in the root of the repository. At the top of this file, you should see `VITE_BASE_PATH="/study/"`. Change "/study/" to `"//"`.
-
-After this, you'll need to make sure that your GitHub repository has workflow actions enabled. Navigate to the actions tab in your repository as shown below.
-
-
-
-On this page, enable workflows as shown below.
-
-
-
-:::info
-If you have enabled GitHub pages or ran any other action in your repo, it won't be possible to enable the workflow on this screen. To enable the workflow, you will have to navigate to the `.github/workflows` folder in your repository, remove the workflow files, commit and push, then add the workflow files back, commit and push again. After that, the workflows should be enabled.
-:::
-
-After you've changed the `.env` file and enabled the workflow, go ahead and push the commit to your forked repository. Afterwards, the deploy action will run. Once that has finished, navigate to the 'settings' tab and then the 'pages' tab.
-
-
-
-
-
-Here we will be able to deploy the site to GitHub pages. In the 'Branch' section, you should see options to select a branch to deploy from. Select 'gh-pages' from the dropdown menu as shown below.
-
-
-
-Click 'Save' once you have made the switch. After a short period of time, your reVISit application will deploy to `.github.io/`. If you want to deploy to a custom domain, you can do that as well by following the instructions on [GitHub](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site).
-
-:::info
-If you would like to enable admin sign ins when you deploy your static website, you will have to make sure that Firebase has your domain name set as an authorized domain. Please see [here](../firebase/enabling-authentication/#adding-authorized-domains) to add your custom domain.
-:::
-
-## Deploying using Netlify
-
-Similarly deploying your study to Netlify is relatively straightforward. First, modify the VITE_BASE_PATH in your `.env` to be
-
-```env title=".env"
-VITE_BASE_PATH="/"
-```
-
-Then create a new file called `public/_redirects`, the contents of the file should be
-
-```txt title="public/_redirects"
-/* /index.html 200
-```
-
-Next, navigate to Netlify. This will likely require you to sign in or to make an account. From the home page, create a new project.
-
-
-
-Then, on the next page, select GitHub. This will require you to authorize Netlify as a GitHub app. This will then bring up a list of repos.
-
-
-
-Search for the appropriate repo and then select it. This will bring up a configuration screen for the new Netlify project. You should enter a project name, which will determine the url (e.g., YOUR_PROJECT.netlify.app if your project name is YOUR_PROJECT). Scroll to the bottom of the screen and click "Deploy YOUR PROJECT NAME".
-
-The first build will take a bit, but once it runs, your experiment should be ready!
-
-If you are using Netlify as a secondary venue for anonymization purposes, you can specify which branch Netlify will use to deploy from. For instance a branch called `for-review` might remove all personnel and affiliation information.
-
-## Deploying using Vercel
-
-Deploying with Vercel is also straightforward and follows a very similar configuration process as the other platforms. Ensure that your VITE_BASE_PATH in your `.env` is like the following:
-
-```env title=".env"
-VITE_BASE_PATH="/"
-```
-
-At the root of your project, create a `vercel.json` file with the following contents:
-
-```json title="vercel.json"
-{
- "rewrites": [{ "source": "/(.*)", "destination": "/index.html" }]
-}
-```
-
-Then, navigate to Vercel. This will likely require you to sign in or to make an account. From the home page, create a new project.
-
-
-
-Then, on the next page, select GitHub. This will require you to authorize Vercel as a GitHub app. This will then bring up a list of repos. Select the appropriate repo. This will bring up a configuration screen for the new Vercel project.
-
-
-
-You likely will not need to make any changes to the configuration. After a short period of time, this will yield a website like `https://.vercel.app/`
-
-## Deploying using render.com
-
-Deploying with render.com is a little more involved than some of the other options, but has similar bones as the other platforms. Ensure that your VITE_BASE_PATH in your `.env` is like the following:
-
-```env title=".env"
-VITE_BASE_PATH="/"
-```
-
-Then, navigate to render.com. This will likely require you to sign in or to make an account. From the home page, create a new project. Select "Static Site" as the type of project you want to create.
-
-
-
-Then, on the next page, select GitHub. This will require you to authorize render.com as a GitHub app. This will then bring up a list of repos. Select the appropriate repo. This will bring up a configuration screen for the new render.com project.
-
-
-
-On this configuration screen, make sure the following options are set (or accept these defaults if Render has already filled them in for you):
-
-- **Build Command**: `npm run build`
-- **Publish Directory**: `dist`
-
-After saving these settings, you will also need to add a rewrite rule. Go to your static site on Render → Redirects/Rewrites tab → Add Rule:
-```
-Type: Rewrite
-Source: /*
-Destination: /index.html
-```
-
-After adding the rewrite rule, deploy your site. After a protracted period of time, this will yield a website like `https://.onrender.com/`
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/deploying-with-docker.md b/versioned_docs/version-v2.4.1/data-and-deployment/deploying-with-docker.md
deleted file mode 100644
index 38e6ec2bae..0000000000
--- a/versioned_docs/version-v2.4.1/data-and-deployment/deploying-with-docker.md
+++ /dev/null
@@ -1,66 +0,0 @@
-# Deploying with Docker
-
-This guide explains how to build and run a ReVISit study with Docker using:
-
-- `Dockerfile`
-- `nginx-docker.conf`
-- `revisit-nginx.conf`
-
-## 1. Set environment variables before building
-
-Before you run `docker build`, configure your `.env` file at the repository root.
-
-At minimum, set `VITE_BASE_PATH` correctly for your deployment target:
-
-```env title=".env"
-# Root deployment
-VITE_BASE_PATH="/"
-
-# Or subpath deployment (example)
-VITE_BASE_PATH="/study/"
-```
-
-:::warning
-`VITE_BASE_PATH` and other `VITE_*` variables are baked into the built app image at build time. If you change these values later, you must rebuild the image and recreate the container. Restarting an existing container is not enough.
-:::
-
-## 2. Build the Docker image
-
-From the project root (where the `Dockerfile` lives):
-
-```bash
-docker build -t revisit-study:latest .
-```
-
-The build will fail if `VITE_BASE_PATH` is missing from `.env`.
-
-## 3. Run the app container
-
-```bash
-docker run --rm -p 8080:8080 revisit-study:latest
-```
-
-Then open:
-
-- `http://localhost:8080/` if `VITE_BASE_PATH="/"`.
-- `http://localhost:8080//` for subpath deployments.
-
-## 4. Optional: proxy through host Nginx
-
-If you are already using Nginx on the host, `revisit-nginx.conf` can proxy traffic to the app container:
-
-```bash
-docker run -d --name revisit-study -p 127.0.0.1:8080:8080 revisit-study:latest
-```
-
-Then install `revisit-nginx.conf` into your host Nginx config (for example, `/etc/nginx/conf.d/revisit.conf`) and reload Nginx.
-
-## 5. Updating after env changes
-
-When `.env` values change, rebuild and replace the running container:
-
-```bash
-docker build -t revisit-study:latest .
-docker rm -f revisit-study
-docker run -d --name revisit-study -p 127.0.0.1:8080:8080 revisit-study:latest
-```
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/data-recovery.md b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/data-recovery.md
deleted file mode 100644
index 2880715dc8..0000000000
--- a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/data-recovery.md
+++ /dev/null
@@ -1,49 +0,0 @@
-# Data Recovery
-
-ReVISit stores study and participant data in Firebase, which is backed by Google Cloud services. Over time, you may need to restore an accidentally deleted file, or review the history of changes to a stored object. This page describes how to recover data and view history of changes to a file using Firebase and Google Cloud Storage.
-
-:::warning
-By default, Object Versioning is disabled for Firebase storage buckets. Without it, there is still a **one-week soft delete recovery window** in which data can be restored.
-:::
-
-reVISit data stored with Firebase lives in Google Cloud services:
-
-- Study and participant records are stored in **Cloud Firestore**.
-- Files (for example, audio and screen recordings) are stored in **Cloud Storage for Firebase**, which uses a **Google Cloud Storage bucket**.
-
-## Viewing Version History for a Single Stored Object
-
-Object version history is managed through Google Cloud Storage, not directly in the Firebase UI.
-
-Every noncurrent object version is stored and billed until removed (manually or with lifecycle rules). For some studies in reVISit, such as studies that store large amounts of provenance data, this may **significantly increase costs**.
-
-1. Enable Object Versioning on your bucket:
- - Open the [Google Cloud Console](https://console.cloud.google.com/).
- - Go to **Cloud Storage** -> **Buckets** -> your Firebase bucket.
- - Open the **Protection** tab and enable **Object versioning**.
-2. View versions for one object:
- - In the bucket's **Objects** tab, change **Show** to **Live and noncurrent objects**.
- - Click the object name.
- - Open the **Version history** tab to see each generation.
-3. (Optional) Restore an older version from that same version history view.
-
-## How Long Version Histories Last
-
-- By default (without Object Versioning), deleted files are recoverable for **one week (7 days)** via the bucket's soft delete policy.
-- With Object Versioning enabled, noncurrent versions are retained until you delete them.
-- There is no default limit on the number of versions kept.
-- If you want automatic cleanup, add Object Lifecycle rules (for example, delete noncurrent versions after N days).
-- Noncurrent versions are billed as stored Cloud Storage data, so turning on version history will increase storage costs.
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/enabling-authentication.md b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/enabling-authentication.md
deleted file mode 100644
index fb2805451f..0000000000
--- a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/enabling-authentication.md
+++ /dev/null
@@ -1,62 +0,0 @@
-# Setting Up Authentication
-
-
-:::warning
-In order to use authentication, you must have a Firebase application already configured. To set up your Firebase application, please see [here](../setup).
-:::
-
-## Enabling Authentication in Firebase
-
-Start by navigating to your Firebase application dashboard. In the left-hand sidebar, choose the 'Authentication' tab.
-
-
-
-Once here, choose the "Sign-in method" in the top sidebar. Here we can add additional providers for signing in. ReVISit only allows for Google SSO. Click on "Add New Provider".
-
-
-
-In the provider section, click on "Google".
-
-
-
-Upon clicking "enable", you will be prompted with providing some information about the application. You can leave these as their defaults. Click "save" and then Google SSO will be enabled in your application immediately.
-
-
-
-## Adding Authorized Domains
-
-Once you have deployed your reVISit application to a website, you'll need to ensure that Google SSO is authorized to redirect back to your website once a user has signed in. To do this, navigate to the "Authentication" section of your Firebase application. In the "Settings" tab you will see an "Authorized Domains" section. Add your domain name(s) using the "Add domain" button on the right.
-
-## Enabling Authentication in reVISit
-
-:::warning
-Note that if your application has been deployed but you have _not_ added your custom authorized domain, then attempting to enable authentication will result in an error.
-:::
-
-Through the settings cog on the right of your reVISit application, navigate to the "settings" page. Here, you will see that authentication will be currently disabled with a button to enable authentication.
-
-When you first enable authentication, you will be prompted to sign in using Google SSO. The account chosen will automatically be added as a user. Any other account attempting to log in to reVISit and access these protected routes will be redirected to the login screen.
-
-## Manage Administrators in reVISit
-
-### Adding Additional Users
-
-To add another administrator, simply navigate to the settings page (where you enabled authentication) and click on the "Add User" icon to the right of the "Enabled Users" section. Enter the Google account email for the user and click save. They will now be an administrator and will immediately be able to log into your reVISit application.
-
-
-
-### Removing A User
-
-In the "Enabled Users" section, you will see the "delete" icon to the right of each user aside from yourself. Any administrator is capable of deleting any user from the reVISit system. The only restriction is that you cannot delete yourself and there can never be less than one user.
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/auth-1.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/auth-1.jpg
deleted file mode 100644
index 0453a4d152..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/auth-1.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/auth-2.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/auth-2.jpg
deleted file mode 100644
index 5eb3c418c9..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/auth-2.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/auth-3.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/auth-3.jpg
deleted file mode 100644
index 53e6128590..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/auth-3.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/auth-4.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/auth-4.jpg
deleted file mode 100644
index ba508d1482..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/auth-4.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/console.png b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/console.png
deleted file mode 100644
index 1f43c17793..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/console.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/demo.png b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/demo.png
deleted file mode 100644
index 7df4b02925..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/demo.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/gsutil_step1.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/gsutil_step1.jpg
deleted file mode 100644
index 0eab96886d..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/gsutil_step1.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step1.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step1.jpg
deleted file mode 100644
index 4a56c40d3b..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step1.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step10.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step10.jpg
deleted file mode 100644
index 9cabc4f684..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step10.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step11.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step11.jpg
deleted file mode 100644
index 93d3303bce..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step11.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step12.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step12.jpg
deleted file mode 100644
index 0453a4d152..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step12.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step13.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step13.jpg
deleted file mode 100644
index 76b7070449..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step13.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step14.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step14.jpg
deleted file mode 100644
index 08439d4ca1..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step14.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step15.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step15.jpg
deleted file mode 100644
index 5131981b82..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step15.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step16.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step16.jpg
deleted file mode 100644
index 1068200b27..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step16.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step17.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step17.jpg
deleted file mode 100644
index 4ef012660d..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step17.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step18.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step18.jpg
deleted file mode 100644
index ded55834d7..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step18.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step19.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step19.jpg
deleted file mode 100644
index c70e6dabc6..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step19.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step2.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step2.jpg
deleted file mode 100644
index 67574e525a..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step2.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step20.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step20.jpg
deleted file mode 100644
index 2f5622617d..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step20.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step21.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step21.jpg
deleted file mode 100644
index 9f95424164..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step21.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step22.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step22.jpg
deleted file mode 100644
index f7a918709b..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step22.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step23.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step23.jpg
deleted file mode 100644
index ec4d72e79f..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step23.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step24.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step24.jpg
deleted file mode 100644
index 68b3b106da..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step24.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step25.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step25.jpg
deleted file mode 100644
index 3e09f19976..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step25.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step3.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step3.jpg
deleted file mode 100644
index 08e97b6adf..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step3.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step4.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step4.jpg
deleted file mode 100644
index fd63ebc228..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step4.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step5.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step5.jpg
deleted file mode 100644
index a58d942dbc..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step5.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step6.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step6.jpg
deleted file mode 100644
index cb2ca41831..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step6.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step7.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step7.jpg
deleted file mode 100644
index c8b0b07e16..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step7.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step8.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step8.jpg
deleted file mode 100644
index 1b4ab68f4c..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step8.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step9.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step9.jpg
deleted file mode 100644
index 218555d634..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/step9.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/storage_step1.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/storage_step1.jpg
deleted file mode 100644
index 66cdbceba6..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/storage_step1.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/storage_step2.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/storage_step2.jpg
deleted file mode 100644
index 8a78e828a8..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/storage_step2.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/storage_step3.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/storage_step3.jpg
deleted file mode 100644
index 3531ebc62d..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/storage_step3.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/storage_step4.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/storage_step4.jpg
deleted file mode 100644
index 7897f4a2d9..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/storage_step4.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/storage_step5.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/storage_step5.jpg
deleted file mode 100644
index 2f849dda33..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/storage_step5.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/storage_step6.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/storage_step6.jpg
deleted file mode 100644
index f57589bd9f..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/img/firebase_steps/storage_step6.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/setup.md b/versioned_docs/version-v2.4.1/data-and-deployment/firebase/setup.md
deleted file mode 100644
index 087d9eae3d..0000000000
--- a/versioned_docs/version-v2.4.1/data-and-deployment/firebase/setup.md
+++ /dev/null
@@ -1,222 +0,0 @@
-# Configuring Firebase
-
-Firebase is an app development platform that has extremely useful tools such as storage and real-time synchronization. With Firebase alone, a study creator can capture all data from participants and then export that data for further analysis. In what follows, there are two main products we will be using: the Firestore database and Firebase's storage product.
-
-:::warning
-As of October 1st, 2024, Firebase has changed its requirements for newly created projects. You will now be prompted to add a payment method when creating a new Firebase project. You will _only_ be charged if you exceed the limits of the "Always Free Tier". We suggest reading over the Firebase tier limits [here](https://cloud.google.com/storage/pricing#cloud-storage-always-free). We have conducted several studies using reVISit without going over the "Always Free Tier" limits, such as [this recent study](https://vdl.sci.utah.edu/publications/2024_preprint_guardrails/), but please be proactive and set up billing alerts to ensure you do not exceed the free tier limits.
-:::
-
-### Create a Firebase Project
-
-Navigate to Firebase and go to your console.
-
-
-Create a new Firebase project
-
-
-
-Name your Project Accordingly
-
-
-
-:::note
-Enabling Google Analytics is not necessary. Feel free to disable this when prompted.
-:::
-
-### Adding a Firestore Database
-
-With your project created, we are now going to add a Firestore database to it. On the left-hand side, you should see a "Build" dropdown menu. From that, select "Firestore Database".
-
-
-Click "Create Database" in the center of the screen.
-
-
-For the next two steps, there is no need to change the defaults. Simply click "Next" and then "Enable".
-
-
-
-
-With the new database created, we'll want to change the read/write rules to only allow authenticated users to write to the database. Go to the 'rules' tab (second tab) and copy and paste the following code. Then click "publish".
-
-```
-rules_version = '2';
-service cloud.firestore {
- match /databases/{database}/documents {
- match /{document=**} {
- allow read: if true
- allow write: if request.auth != null;
- }
- }
-}
-```
-
-
-
-### Adding Firebase Storage
-
-Once that is finished, we will enable standard Firebase storage. Click the "Build" dropdown menu again and navigate to "Storage". We can leave the options as their defaults.
-
-
-
-
-
-
-
-
-
-Once the storage product is enabled, navigate to the "rules" tab.
-
-
-
-Replace the existing rule with the following code and then publish:
-
-```
-rules_version = '2';
-
-service firebase.storage {
- match /b/{bucket}/o {
- match /{allPaths=**} {
- allow read, write: if true;
- }
- }
-}
-```
-
-
-
-### Adding automatic transcription for Think Aloud studies
-
-If you plan to use [Think Aloud](../../designing-studies/think-aloud.md) studies with Firebase and want transcripts, install the [Google Cloud Speech-to-Text extension](https://extensions.dev/extensions/googlecloud/speech-to-text) from the Firebase Extensions marketplace.
-
-Once the extension is configured for your project, it will automatically transcribe uploaded audio files. This is the setup reVISit expects when you want transcripts to appear in analysis and export workflows.
-
-### Adding an App to the Firebase Project
-
-We are now going to add an app to your Firebase project:
-
-
-
-
-With the app set up, we are ready to copy over the app configuration to your reVISit project. In the image below you will see a JSON object denoted as `const firebase = { ... }`.
-
-
-
-Copy the contents of that JSON object into the `.env` file for the variable `VITE_FIREBASE_CONFIG`. In the `.env` file, your `VITE_FIREBASE_CONFIG` variable should still be a JSON object that is escaped in single quotes.
-
-#### Authentication
-
-We are now going to set up the authentication so that your browser is authorized to communicate with your Firebase database.
-
-
-
-
-
-
-
-
-:::info
-In addition to what is shown above, you will want to enable "Google Authentication" in the same section of Firebase. You can do this by choosing the "Google" sign in method under the "Additional Providers" section. The anonymous sign-in is used for participants taking the study. It allows them to access and send data to the Firestore without external authentication. The Google sign-in method is used to authenticate administrators for managing studies and data. Please see [here](../enabling-authentication) for more detailed authentication information and set up instructions.
-:::
-
-#### App Check
-
-Our last step is to set up App Check.
-
-
-
-
-
-Click on register to register your app with recaptcha.
-
-
-
-At this point you will need to navigate to [Recaptcha](https://www.google.com/recaptcha/admin/create) to create a secret key.
-
-
-
-The important part here is filling out the domains that you will allow to access the Firebase database. Add localhost and 127.0.0.1 to test your survey on your local machine.
-
-:::info
-If you are planning on hosting this externally (such as using GitHub pages), you need to also enter the base URL for your website. For the GitHub pages deployment, you should enter your base GitHub pages URL (i.e. <username>.github.io).
-:::
-
-
-
-You should now see a SITE key and a SECRET key. First, copy the secret key and paste it back into the Firebase re-captcha page as shown in the following images.
-
-
-
-
-
-Now, copy the SITE key. That site should now go back into your `.env` file for the variable `VITE_RECAPTCHAV3TOKEN`.
-
-Now we will link your browser to your app through a debug key.
-
-:::info
-To see the debug token, you need to enable Firebase storage. Open up the .env file in the root of the repository. Change the VITE_STORAGE_ENGINE variable value to "firebase". Once you have Firebase already set up, you can switch between "localStorage" and "firebase" freely for development purposes.
-:::
-
-- Navigate to http://localhost:8080 and click on any demo study.
-
-- Open up the browser console. This differs depending on the web browser that you are using. You can find the various ways to view the browser console for popular web browsers here.
-
-- Copy the debug token from the console.
- 
-
-- Navigate to your Firebase instance and add the token as shown below:
-
-
-
-
-
-
-
-### Allowing for CORS requests
-
-Once that is finished, we'll have to use Google's `gsutil` function in the terminal to set up a CORS policy so that the application can communicate with Firebase storage. Follow these steps on how to install gsutil on your local machine.
-
-After installing gsutil, you need to navigate to the `google-cloud-sdk/bin` folder on your local machine. Create a new file called "cors.json" with the following contents:
-
-```json
-[
- {
- "origin": ["*"],
- "method": ["GET"],
- "maxAgeSeconds": 3600
- }
-]
-```
-
-Lastly, while still inside this same directory, call the following function:
-
-```bash
-gsutil cors set cors.json gs://
-```
-
-You can find the link for the storage bucket by navigating to the "storage" product in Firebase.
-
-
-
-Assuming that you have already changed the `VITE_STORAGE_ENGINE` variable in the `.env` file to "firebase", you can now call `yarn serve` to launch the server and navigate to http://localhost:8080 to launch any demo study. All data from any participation will automatically be uploaded to the store.
-
-:::note
-When running `yarn build`, reVISit automatically uses the Firebase storage engine.
-:::
-
-
-
-### Deployment
-
-If you are intending to deploy your reVISit application to a static website, we suggest following our [guide to deploy to GitHub pages](../../deploying-to-static-website). In this, you'll see that there is an additional step that you will need to follow in Firebase so that your custom domain can authorize users.
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/img/deploy_step1.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/img/deploy_step1.jpg
deleted file mode 100644
index ff12367c11..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/img/deploy_step1.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/img/deploy_step2.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/img/deploy_step2.jpg
deleted file mode 100644
index e15524c2f9..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/img/deploy_step2.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/img/deploy_step3.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/img/deploy_step3.jpg
deleted file mode 100644
index 5dded680d5..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/img/deploy_step3.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/img/deploy_step4.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/img/deploy_step4.jpg
deleted file mode 100644
index 3338664a77..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/img/deploy_step4.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/img/deploy_step5.jpg b/versioned_docs/version-v2.4.1/data-and-deployment/img/deploy_step5.jpg
deleted file mode 100644
index 9e6944493e..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/img/deploy_step5.jpg and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/img/manage_admin/add_user.png b/versioned_docs/version-v2.4.1/data-and-deployment/img/manage_admin/add_user.png
deleted file mode 100644
index 6c018b4983..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/img/manage_admin/add_user.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/img/manage_admin/remove_user.png b/versioned_docs/version-v2.4.1/data-and-deployment/img/manage_admin/remove_user.png
deleted file mode 100644
index e6cf3560a9..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/img/manage_admin/remove_user.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/img/netlify_steps/netlify_1.png b/versioned_docs/version-v2.4.1/data-and-deployment/img/netlify_steps/netlify_1.png
deleted file mode 100644
index 50b060cac8..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/img/netlify_steps/netlify_1.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/img/netlify_steps/netlify_2.png b/versioned_docs/version-v2.4.1/data-and-deployment/img/netlify_steps/netlify_2.png
deleted file mode 100644
index 9604236ee8..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/img/netlify_steps/netlify_2.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/img/prolific_participantID.png b/versioned_docs/version-v2.4.1/data-and-deployment/img/prolific_participantID.png
deleted file mode 100644
index 073ef349f7..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/img/prolific_participantID.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/img/render_steps/render_0.png b/versioned_docs/version-v2.4.1/data-and-deployment/img/render_steps/render_0.png
deleted file mode 100644
index 11b867ba44..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/img/render_steps/render_0.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/img/render_steps/render_1.png b/versioned_docs/version-v2.4.1/data-and-deployment/img/render_steps/render_1.png
deleted file mode 100644
index b42e899ac5..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/img/render_steps/render_1.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/img/revisit-modes.png b/versioned_docs/version-v2.4.1/data-and-deployment/img/revisit-modes.png
deleted file mode 100644
index d4fb752563..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/img/revisit-modes.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/img/vercel_steps/vercel_0.png b/versioned_docs/version-v2.4.1/data-and-deployment/img/vercel_steps/vercel_0.png
deleted file mode 100644
index 5fbb667a8c..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/img/vercel_steps/vercel_0.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/img/vercel_steps/vercel_1.png b/versioned_docs/version-v2.4.1/data-and-deployment/img/vercel_steps/vercel_1.png
deleted file mode 100644
index e06aeb80af..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/img/vercel_steps/vercel_1.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/index.md b/versioned_docs/version-v2.4.1/data-and-deployment/index.md
deleted file mode 100644
index 1b84dd9e17..0000000000
--- a/versioned_docs/version-v2.4.1/data-and-deployment/index.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# Data And Deployment
-
-
-import DocCardList from '@theme/DocCardList';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/lifecycle-of-revisit.md b/versioned_docs/version-v2.4.1/data-and-deployment/lifecycle-of-revisit.md
deleted file mode 100644
index a100359c78..0000000000
--- a/versioned_docs/version-v2.4.1/data-and-deployment/lifecycle-of-revisit.md
+++ /dev/null
@@ -1,59 +0,0 @@
-# The Lifecycle of a reVISit Study
-
-A reVISit study will go through multiple stages over its lifetime. It'll first start as a local study that is iteratively refined until the study is fully built, it will then be deployed and tested, it will be sent out to participants for data to be collected, and finally the study will be disseminated to reviewers.
-
-## Revisit Modes
-
-To assist study designers with each stage of this process, we expose 3 application state switches:
-
-
-
-1. Data Collection- This enables/disables data collection which is useful when making modifications to the study when you don't want to add data to the database. This also disables sequence assignments, which means viewing the study will not affect your latin square balance.
-2. Development Mode - This enables the study browser in the study interface. This is great for moving around your study during development, and great for reviewers that might want to inspect the stimuli you gave to participants.
-3. Share Data and Make Analytics Interface Public - This makes the study visible to un-authenticated users in the analytics platform. This is great for sharing your results with reviewers and the wider public. We suggest that when this mode is turned on, you also disable data collection so that your data is not tainted by people reviewing your study.
-
-## Local Development
-
-In local development, it's likely that you want to collect sample data, try multiple sequences, navigate through the study, and see the collected data. To this end, you will likely want to:
-
-- Enable data collection
-- Enable development mode
-- Make the analytics interface publicly accessible
-
-## Testing a Production Deployment
-
-Just as in local development, when testing your study on the production deployment, you should:
-
-- Enable data collection
-- Enable development mode
-- Make the analytics interface publicly accessible
-
-## Collecting Participant Data
-
-When you start collecting participant data, you will want to:
-
-- Clear out the testing data from your database using the [snapshots](../analysis/data-management.md) interface
-- Enable data collection
-- Disable development mode
-- Make the analytics interface not publicly accessible
-
-## Disseminating to Reviewers
-
-When disseminating your study to reviewers and the wider public, you should:
-
-- Make a snapshot of your data using the [snapshots](../analysis/data-management.md) interface. Snapshots create a copy of your data to protect against any issues, but allows the wider public to see your collected data.
-- Disable data collection
-- Enable development mode
-- Make the analytics interface publicly accessible
-
-If you are submitting to a venue that requires anonymization, such as ACM SIGCHI, consider creating a second deployment. If your primary deployment is on GitHub, consider adding a secondary one on such as Netlify or Vercel. For more information about deploying to other websites, see [deploying to a static website](../deploying-to-static-website/).
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/supabase/enabling-authentication.md b/versioned_docs/version-v2.4.1/data-and-deployment/supabase/enabling-authentication.md
deleted file mode 100644
index c74229810c..0000000000
--- a/versioned_docs/version-v2.4.1/data-and-deployment/supabase/enabling-authentication.md
+++ /dev/null
@@ -1,59 +0,0 @@
-# Setting Up Authentication
-
-:::warning
-In order to use authentication, you must have a Supabase application already configured. To set up your Supabase application, please see [here](../setup).
-:::
-
-## Enabling Authentication in Supabase
-
-Supabase provides a variety of authentication methods.
-
-:::info
-Supabase supports multiple OAuth providers, but reVISit currently only officially supports GitHub OAuth. If you want to configure other providers in Supabase look at the [gotrue docs](https://github.com/netlify/gotrue).
-:::
-
-To enable GitHub OAuth, start by navigating to GitHub and creating a new OAuth application [here](http://github.com/settings/developers).
-
-Give your application a name, such as `ReVISit Supabase`. For the "Homepage URL", enter the URL where your reVISit application will be hosted (e.g., `https://my-revisit-app.com`). This must include the `https://` prefix.
-
-Lastly set the "Authorization callback URL" to `https:///auth/v1/callback`, replacing `` with your actual Supabase domain (e.g., `https://supabase.organization.com/auth/v1/callback`).
-
-
-
-After creating the OAuth application, you will be provided with a Client ID. Copy this in to the `supabase/.env` file in the `GITHUB_OAUTH_CLIENT_ID` field.
-
-Next, generate a new Client Secret by clicking the "Generate a new client secret" button. Copy this in to the `supabase/.env` file in the `GITHUB_OAUTH_CLIENT_SECRET` field.
-
-Now, set the `GITHUB_OAUTH_REDIRECT_URI` field in the `supabase/.env` file to the same URL you used for the "Authorization callback URL" in GitHub.
-
-Finally, ensure that your `SITE_URL` field in the `supabase/.env` file is set to the URL where your reVISit application will be hosted (e.g., `https://my-revisit-app.com/study`). If this is not set, the redirects won't work properly.
-
-## Enabling Authentication in reVISit
-
-Through the settings cog on the right of your reVISit application, navigate to the "settings" page. Here, you will see that authentication will be currently disabled with a button to enable authentication.
-
-When you first enable authentication, you will be prompted to sign in using GitHub Oauth. The account chosen will automatically be added as a user. Any other account attempting to log in to reVISit and access these protected routes will be redirected to the login screen.
-
-## Manage Administrators in reVISit
-
-### Adding Additional Users
-
-To add another administrator, simply navigate to the settings page (where you enabled authentication) and click on the "Add User" icon to the right of the "Enabled Users" section. Enter the Google account email for the user and click save. They will now be an administrator and will immediately be able to log into your reVISit application.
-
-
-
-### Removing A User
-
-In the "Enabled Users" section, you will see the "delete" icon to the right of each user aside from yourself. Any administrator is capable of deleting any user from the reVISit system. The only restriction is that you cannot delete yourself and there can never be less than one user.
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/supabase/img/github-oauth-setup.png b/versioned_docs/version-v2.4.1/data-and-deployment/supabase/img/github-oauth-setup.png
deleted file mode 100644
index 08285d0b33..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/supabase/img/github-oauth-setup.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/supabase/img/storage-bucket.png b/versioned_docs/version-v2.4.1/data-and-deployment/supabase/img/storage-bucket.png
deleted file mode 100644
index b463760b7a..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/supabase/img/storage-bucket.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/supabase/img/storage-policy.png b/versioned_docs/version-v2.4.1/data-and-deployment/supabase/img/storage-policy.png
deleted file mode 100644
index 2273a2cf51..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/supabase/img/storage-policy.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/supabase/img/table-creation.png b/versioned_docs/version-v2.4.1/data-and-deployment/supabase/img/table-creation.png
deleted file mode 100644
index 0cbc5dd774..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/supabase/img/table-creation.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/supabase/img/table-policy.png b/versioned_docs/version-v2.4.1/data-and-deployment/supabase/img/table-policy.png
deleted file mode 100644
index d32339b075..0000000000
Binary files a/versioned_docs/version-v2.4.1/data-and-deployment/supabase/img/table-policy.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/supabase/setup.md b/versioned_docs/version-v2.4.1/data-and-deployment/supabase/setup.md
deleted file mode 100644
index 295cd091b1..0000000000
--- a/versioned_docs/version-v2.4.1/data-and-deployment/supabase/setup.md
+++ /dev/null
@@ -1,161 +0,0 @@
-# Configuring Supabase
-
-
-Supabase is an open-source alternative to Firebase that provides a real-time database and storage solution. It is built on top of PostgreSQL, which allows for more complex queries and data structures. Supabase is particularly useful for researchers who need to comply with strict data privacy regulations, as it can be self-hosted.
-
-This guide will be focused on setting up a self-hosted Supabase instance for use with reVISit. If you would like to use a hosted solution, we suggest that you use the Firebase implementation instead. However, if you would like to use Supabase, as a hosted solution, you can follow the instructions on their website to stand up a hosted instance.
-### Pre-requisites
-
-Before you begin, ensure you have the following:
-- A Linux server or cloud VM where you can install Supabase (EC2, DigitalOcean Droplet, etc.; Ubuntu LTS is recommended)
-- Basic knowledge of Docker and Docker Compose
-- SSH access to the remote server
-- Access to your cloud firewall controls (EC2 Security Groups, DigitalOcean Cloud Firewall, or `ufw`)
-- A domain name is strongly recommended if you plan to enable HTTPS/SSL
-
-### Setting Up Supabase
-
-Once your server or VM is running, follow these steps:
-
-1. **SSH into the remote server**: From your local machine, connect to your server:
-
- ```bash
- ssh @
- ```
-
- All remaining setup commands in this section should be run on the remote server.
-
-2. **Install Docker and Docker Compose**: If you don't have Docker installed, follow the [official Docker installation guide](https://docs.docker.com/get-docker/). Then install Docker Compose using the [Docker Compose installation guide](https://docs.docker.com/compose/install/).
-
-3. **Clone the reVISit repository on the server**: Navigate to the directory where you want to host Supabase and clone the reVISit repository. If it already exists on the server, pull the latest changes.
-
-4. **Navigate to the Supabase directory**: Inside the reVISit repository, navigate to the `supabase` directory.
-
-5. **Update the `.env` file**: We provide a `.env` file that must be updated with your own credentials and secrets. Leaving defaults in place creates an insecure deployment. Follow the instructions on the [Supabase self-hosting documentation](https://supabase.com/docs/guides/self-hosting/docker#securing-your-services) to secure your `.env` file.
-
-6. **Start Supabase**: Run the following command to start Supabase using Docker Compose:
-
- ```bash
- docker-compose up -d
- ```
-
- This will pull the docker images and start the Supabase services in detached mode.
-
-7. **Configure remote network access (important)**: For a remote server deployment, explicitly configure inbound firewall rules:
-
- - **EC2 Security Group**: Allow `22` (SSH) from your admin IP; allow `80` and `443` from the internet if using a reverse proxy; only allow `8000` from trusted admin IPs if you must expose it directly.
- - **DigitalOcean Cloud Firewall / `ufw`**: Same pattern as above. Keep dashboard/admin ports restricted whenever possible.
- - Do **not** open database/internal ports publicly unless you have a specific, secured need.
-
-8. **Access the Supabase Dashboard**:
- - Direct access (less secure): `http://:8000`
- - Recommended while administering remotely: use an SSH tunnel from your local machine:
-
- ```bash
- ssh -L 8000:localhost:8000 @
- ```
-
- Then open `http://localhost:8000` locally.
-
- Log in using the credentials you set in the Supabase `.env` file.
-
-:::info
-For long-term deployments, prefer exposing Supabase through HTTPS on `443` via a reverse proxy and keep `8000` private.
-:::
-
-9. **Create a table for reVISit data**: You will need to create a table for storing user data. In the Supabase dashboard you should see that you're in the default project. From here click on "Table Editor" (the second icon) and then "New table" to create a new table. The table should be called `revisit` and should have the following columns
-
- | Column Name | Data Type | Constraints |
- |-------------|-----------|----------------------------|
- | createdAt | Timestamp | Default: `now()` |
- | studyId | Varchar | Primary Key |
- | docId | Varchar | Primary Key |
- | data | JSONB | Nullable |
-
- **Notes:**
- - Set both `studyId` and `docId` as composite primary keys.
- - The `createdAt` column should automatically use the current timestamp.
- - The `data` column can store any JSON object and can be left empty.
-
- 
-
- Save the table. The new table requires a policy to allow authenticated users to read and write to the table. You can do this by clicking on "Add RLS Policy" in the table editor and adding a new policy to the revisit table.
-
- The policy should be called `allow_authenticated_read_write`, be on public.revisit, be Permissive, and allow all operations. Select "anon", "authenticated", and "service_role" as the roles that can access this policy. In the "using" block add `true`. At the bottom, uncheck "Use check expression". Now click "Save Policy".
-
- 
-
-10. **Create a storage bucket**: In the Supabase dashboard, navigate to the "Storage" section (6th icon) and create a new bucket called `revisit`. This bucket will be used to store participant data, audio, configs, etc. Ensure that the bucket is not public, as we want to restrict access to the data to users of your reVISit deployment.
-
- 
-
- Since your bucket is not public, you will need to set up a policy to allow authenticated users to read and write to the bucket. You can do this by navigating to the "Policies" tab in the bucket settings and adding a new policy to the revisit bucket.
-
- Name the policy `allow_authenticated_read_write` and allow select, insert, update, and delete operations. Select "anon", "authenticated", and "service_role" as the roles that can access this policy and click next. The top of the 4 policies should look like this:
-
- ```sql
- CREATE POLICY "allow_authenticated_read_write i6w3co_0"
- ON storage.objects
- FOR SELECT TO anon, authenticated, service_role
- USING (bucket_id = 'revisit');
- ```
-
- Click save policy.
-
- 
-
-11. **Update your `.env` file in your deployed reVISit application**: In the root of your reVISit application, update the `.env` file with the following variables:
-
- ```env title=".env"
- VITE_STORAGE_ENGINE="supabase"
- VITE_SUPABASE_URL="https://"
- VITE_SUPABASE_ANON_KEY=""
- ```
- Replace `` with the public URL used by clients to reach Supabase (for example, `supabase.your-domain.com` or your server IP/port during testing), and `` with the anon key found in the Supabase `.env` file.
-
-12. **Redeploy your reVISit application**: After updating the `.env` file, redeploy your reVISit application to ensure that it connects to the Supabase instance correctly.
-
-After following these steps, your reVISit application should be connected to your Supabase instance, and you can start collecting data from participants.
-
-### HTTPS/SSL Configuration
-
-To ensure secure communication between your reVISit application and the Supabase instance, it is recommended to set up HTTPS/SSL. You can use a reverse proxy like Nginx or Caddy to handle SSL termination. It's required that your server or VM has a Fully Qualified Domain Name (FQDN) and a valid SSL certificate. With those in place, you can configure your reverse proxy to redirect HTTP traffic to HTTPS and handle SSL termination.
-
-For example, if you are using Nginx, you can set up a server block like this:
-
-```nginx
-server {
- listen 80;
- server_name your-domain.com;
- return 301 https://$host$request_uri;
-}
-server {
- listen 443 ssl;
- server_name your-domain.com;
-
- ssl_certificate /path/to/your/certificate.crt;
- ssl_certificate_key /path/to/your/private.key;
-
- location / {
- proxy_pass http://localhost:8000; # Supabase endpoint exposed by Docker Compose
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- }
-}
-```
-Make sure to replace `your-domain.com` with your actual domain name and provide the correct paths to your SSL certificate and private key.
-
-Once the reverse proxy is set up, you can access your Supabase instance securely over HTTPS. Update `VITE_SUPABASE_URL` in your reVISit `.env` file to use `https://` and drop the port if you are using default `443` (as shown in the example above).
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/data-and-deployment/user-management.md b/versioned_docs/version-v2.4.1/data-and-deployment/user-management.md
deleted file mode 100644
index edae2d341d..0000000000
--- a/versioned_docs/version-v2.4.1/data-and-deployment/user-management.md
+++ /dev/null
@@ -1,122 +0,0 @@
-# User Management in reVISit
-
-:::tip
-To use the user-management system that is built into reVISit, you must have a Firebase application set up. Please see [here](../firebase/setup) for how to set up a Firebase application. Additionally, you will need to enable the Google sign-in method for Authentication. You can find this section of the Firebase tutorial [here](../firebase/setup#authentication).
-:::
-
-ReVISit comes with an authentication and authorization system that allows a study creator to manage what users should have access to (possibly sensitive) user data and analysis. This is managed with Firebase's Google SSO and custom authorization tools built into the reVISit application. Enabling the authentication system will not interfere with who can take an individual study. Instead, it will allow a study creator to feel confident that a participant is not navigating to portions of the application which is intended for the study creator only.
-
-:::warning
-It is not required that you use the authentication system in reVISit, but it is highly recommended. Without this, any individual will be able to see and download any data that is stored in your Firebase application.
-:::
-
-## How does authentication work in reVISit?
-
-There are a few different personas that we consider when talking about accessing the reVISit platform. To start, we will consider the personas "participant" and "administrator". A "participant" would be any user who is meant to participate in one or more studies. In general, participants are given a link to the study itself and have no immediate way to navigate to the main page, the analysis dashboard, or the settings page. In other words, there are no specific navigation buttons within an individual study which direct to any of these three pages.
-
-However, this does not necessarily prevent a user from accessing these pages; if a user knows the URL for these other pages, they are free to access them if authentication is not enabled. We want to make sure that the participant is not only solely focused on the study, but also that the participant does not have the ability to navigate to pages containing sensitive information.
-
-An "administrator" should, conversely, have access to all information that is in reVISit. This means they should have access to all user data, the analysis dashboard, and any study that is created within this particular application.
-
-When authentication is enabled, all administrators are required to log into the application before proceeding to the analysis dashboard and other protected routes. Participants will still be able to take studies without the need for signing into the application.
-
-:::info
-When a user goes directly to a study, they are signed in anonymously. This means that no personally identifiable information is captured. This is only done so that we can persist the user data across the entire study.
-:::
-
-When you first set up your reVISit application, authentication is disabled by default. The user who first enables this authentication will be prompted to sign in via Google SSO. They will automatically become the first administrator. Additional administrators can be added afterwards.
-
-:::warning
-Authentication should be enabled prior to deployment. This will prevent any unwanted user from enabling authentication and setting themselves as an administrator. Adding or removing administrators can be done before or after deployment.
-:::
-
-## Recovering from lost access
-
-### Firebase
-
-:::danger
-In general, we do not advise editing the user management data directly in the Firestore Database. This should only be used in cases where the security of the application has been compromised and there is no way to edit the user access within the reVISit application. Please see [here](../firebase/enabling-authentication) for editing users within the reVISit UI.
-:::
-
-ReVISit allows you to handle all necessary user management from the reVISit UI. However, if you are ever in a situation where you have lost access to the reVISit application, you can still edit the user access via the Firestore.
-
-#### `user-management` collection
-
-In the Firebase application, you will see that your Firestore Database contains many different collections pertaining to the data collected for each study. There is an additional collection called `user-management`. If authentication was enabled, you should see two documents in the collection labeled `adminUsers` and `authentication`.
-
-The `adminUsers` will contain a single list called the `adminUsersList`. Each entry of this list is of the following form:
-
-```json
-{
- "email": "myemail@gmail.com",
- "uid": ""
-}
-```
-
-The `uid` is automatically generated when the user signs in for the first time. If the `uid` field is `null`, then that means the user has not yet signed in.
-
-The `authentication` document will only contain the boolean `isEnabled`. If this is set to `false`, authentication is completely disabled but the users will not be removed from the `adminUsers` collection.
-
-#### How to Reset Authentication
-
-The easiest and cleanest way to reset the authentication is to essentially remove this collection. This will allow you to re-do the authentication process completely (i.e. enable authentication within the reVISit application and sign in as an administrator).
-
-:::warning
-If this step is necessary, we advise that you first remove this application from any public facing website. This is the same protocol when setting up authentication for the first time; ensure that there are no other unwanted users who can access the reVISit application while you set up authentication.
-:::
-
-Go into the Firestore Database and navigate to the `user-management` collection. On this collection, you should see three vertical dots to the right. This will provide an option for deleting this collection.
-
-Once the collection is deleted, your reVISit application will be ready to re-enable authentication.
-
-### Supabase
-
-:::danger
-In general, we do not advise editing the user management data directly in the Supabase Database. This should only be used in cases where the security of the application has been compromised and there is no way to edit the user access within the reVISit application. Please see [here](../supabase/enabling-authentication) for editing users within the reVISit UI.
-:::
-
-#### The `user_management` table row
-
-In the Supabase application, navigate to the table editor and select the `revisit` table. You should see a row in the table with the `docId` of `user_management`. This row contains two fields: `admin_users` and `authentication`.
-
-The `admin_users` field will contain a JSON array of objects. Each object will have the following structure:
-
-```json
-{
- "email": "myemail@provider.com",
- "uid": ""
-}
-```
-
-The `uid` is automatically generated when the user signs in for the first time. If the `uid` field is `null`, then that means the user has not yet signed in.
-
-The `authentication` field will contain a JSON object with a single key-value pair:
-
-```json
-{
- "is_enabled": true
-}
-```
-
-#### How to Reset Authentication
-
-The easiest and cleanest way to reset the authentication is to essentially remove this row. This will allow you to re-do the authentication process completely (i.e. enable authentication within the reVISit application and sign in as an administrator).
-
-:::warning
-If this step is necessary, we advise that you first remove this application from any public facing website. This is the same protocol when setting up authentication for the first time; ensure that there are no other unwanted users who can access the reVISit application while you set up authentication.
-:::
-
-Go into the table editor and navigate to the `revisit` table. Find the row with the `docId` of `user_management`. On this row, you should see a checkbox to the left. Select this checkbox and then select the "Delete" button at the top of the table editor. This will delete the row from the table.
-
-Once the row is deleted, your reVISit application will be ready to re-enable authentication.
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/designing-studies/answers-trainings.md b/versioned_docs/version-v2.4.1/designing-studies/answers-trainings.md
deleted file mode 100644
index 8245cf658b..0000000000
--- a/versioned_docs/version-v2.4.1/designing-studies/answers-trainings.md
+++ /dev/null
@@ -1,188 +0,0 @@
-# Responses and Answers
-
-In reVISit, a [component](../../typedoc/interfaces/BaseIndividualComponent) typically has a [response](../../typedoc/interfaces/BaseResponse) that is recorded when a participant completes a task. Responses can be provided via form elements or via some other kind of payload through your custom component and a [ReactiveResponse](../../typedoc/interfaces/ReactiveResponse).
-
-Responses can optionally also be provided with an [Answer](../../typedoc/interfaces/Answer) that captures what the correct response is. This answer is used in several ways:
-
- * If an answer is present, the data export will include data for the task that lists True and False for each response.
- * In the analysis interface, tasks will be shown as correct or incorrect depending on the answer.
- * Answers can be used to check the response during the experiment, which is useful for **training**.
-
-:::info
-There might be situations when answers cannot accurately capture whether a response was correct or not (e.g., with text input). In other situations, answers may have "degrees of correctness". In such cases, you will have to compute correct answers as part of your data analysis process.
-:::
-
-## Specifying Answers and Trainings
-
-When you develop an online study, it's often important to train participants well before they can take a study. Typically, you want to give them an example task, but also provide help and hints at first. Here we lay out possibilities to develop trainings in reVISit leveraging responses and answers.
-
-For a working example, refer to [the demo](https://revisit.dev/study/demo-training/) and the [associated config](https://github.com/revisit-studies/study/tree/main/public/demo-training).
-
-Here's a simple dropdown component asking what the most efficient visual mark is. The `correctAnswer` field contains an answer for the `q-mark-type` response that specifies that the correct answer is `Bar`.
-
-```json title="public/demo-training/config.json"
-"simple-dropbox": {
- "type": "questionnaire",
- "response": [
- {
- "id": "q-mark-type",
- "type": "dropdown",
- "required": true,
- "prompt": "What is the most efficient visual mark?",
- "secondaryText": "Hint: it's not round.",
- "placeholder": "Choose mark",
- "options": [
- "Bar",
- "Bubble",
- "Pie",
- "Stacked Bar"
- ]
- }
- ],
- "correctAnswer": [
- {
- "id": "q-mark-type",
- "answer": "Bar"
- }
- ],
- "provideFeedback": true,
- "allowFailedTraining": false,
- "trainingAttempts": 4
-}
-```
-
-The last three lines specify that this is used for training:
-
-The `provideFeedback` field adds a "Check Answer" button to the UI, which can be used to validate the answer based on the provided correct answer.
-
-
-
-The above screenshot shows an example for when the response was incorrect.
-
-Optionally, you can specify that trainings have to be successfully completed with the `allowFailedTraining` flag. You can specify the number of attempts with the `trainingAttempts` field. When failing is not allowed and the participant exceeds the number of failed attempts, **the study will terminate**.
-
-
-If a user fails the training and `allowFailedTraining` is set to `false`, they’ll automatically be marked as rejected. After a 5-second delay, they’ll be taken to a "Training Failed" page that informs them that they didn’t meet the training requirements and cannot continue with the study.
-
-## Navigation Buttons
-
-You can customize the behavior and appearance of navigation buttons in your study components. These options can be set globally in the `uiConfig` or overridden on individual components.
-
-### Next
-
-The next button offers several customization options. You can change the button text using `nextButtonText` (e.g., "Continue", "Next Question") and control its location with `nextButtonLocation`.
-
-To enable keyboard navigation, set `nextOnEnter` to `true`, which allows participants to press Enter to move to the next question.
-
-For timing control, you can use `nextButtonEnableTime` to delay when the button becomes clickable, which helps ensure participants have time to read the content, and `nextButtonDisableTime` to set a time limit after which the button becomes disabled, which is useful for time-limited tasks.
-
-You can also combine `nextButtonDisableTime` with `timeoutReject` to automatically reject participants who do not click the next button within the time limit. This setup is useful for enforcing strict time constraints in tasks or training phases.
-
-
-
-```json title="public/study-name/config.json"
-"uiConfig": {
- ...
- "timeoutReject": true
-},
-"components": {
- "timed-task": {
- "type": "questionnaire",
- "nextButtonText": "Continue",
- "nextOnEnter": true,
- "nextButtonEnableTime": 2000,
- "nextButtonDisableTime": 30000,
- "response": [
- {
- "id": "q1",
- "prompt": "Answer within 30 seconds",
- "type": "shortText"
- }
- ]
- }
-}
-```
-
-### Check Answer
-
-When you set `correctAnswer` and `provideFeedback` to `true`, a "Check Answer" button appears next to the Next button. Participants can click this button to see if their answer is right or wrong before moving on.
-
-The Check Answer button uses `trainingAttempts` to limit how many times participants can check their answer. When a participant gets the answer right, the Check Answer button turns off and the Next button turns on. If you set `trainingAttempts` to a number, the button turns off after that many tries.
-
-You can choose what happens when participants fail training by setting `allowFailedTraining`. When set to `false`, participants who use up all their tries without getting the answer right will be rejected from the study.
-
-```json title="public/study-name/config.json"
-"components": {
- "training-task": {
- "type": "questionnaire",
- "provideFeedback": true,
- "trainingAttempts": 3,
- "allowFailedTraining": false,
- "correctAnswer": [
- {
- "id": "q1",
- "answer": "Correct Answer"
- }
- ],
- "response": [
- {
- "id": "q1",
- "prompt": "What is the correct answer?",
- "type": "dropdown",
- "options": ["Correct Answer", "Wrong Answer", "Another Wrong Answer"]
- }
- ]
- }
-}
-```
-
-
-
-### Previous
-
-You can enable the previous button by setting `previousButton` to `true`, which lets participants move back through earlier parts of the study if needed. You can also customize the button text with `previousButtonText`.
-
-```json title="public/study-name/config.json"
-"components": {
- "survey": {
- "type": "questionnaire",
- "previousButton": true,
- "previousButtonText": "Back",
- "response": [
- {
- "id": "q1",
- "prompt": "First question?",
- "type": "shortText"
- },
- {
- "id": "q2",
- "prompt": "Second question?",
- "type": "dropdown",
- "options": ["Option A", "Option B"]
- }
- ]
- }
-}
-```
-
-
-
-:::warning
-**You should only use the previous button with simple stimuli, like form elements, images, markdown, etc.** If you have interactive components, use provenance tracking, use screen capture or audio capture, going back to a previous state will result in undesired behavior: all states, video, audio, will be overwritten.
-:::
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/designing-studies/applying-style.md b/versioned_docs/version-v2.4.1/designing-studies/applying-style.md
deleted file mode 100644
index 7c8c35df26..0000000000
--- a/versioned_docs/version-v2.4.1/designing-studies/applying-style.md
+++ /dev/null
@@ -1,577 +0,0 @@
-# Applying Styles
-
-ReVISit provides flexible styling capabilities to customize the appearance of your study components and responses. You can apply styles at three levels: **globally through UI configuration**, at the **component** level, and at the **response** level.
-
-This comprehensive styling feature allows you to create accessible and visually appealing study interfaces that enhance the participant experience.
-
-## Styling Methods
-
-There are two primary ways to apply styles to your study:
-
-### 1. External CSS Files (`stylesheetPath`)
-For comprehensive styling with complex rules, pseudo-classes, etc. across all components, you can load external CSS files.
-
-```json title="public/study-name/config.json"
-"uiConfig": {
- "stylesheetPath": "study-name/assets/style.css"
-}
-```
-
-When styling elements with external CSS files, target them using the appropriate selectors:
-
-**Class Selectors:**
-- Sidebar: `.sidebar`
-- Study Browser: `.studyBrowser`
-- Header/Title Bar: `.header`
-- Main Content Area: `.main`
-- Logo Image: `.logoImage`
-- Study Title: `.studyTitle`
-- Progress Bar: `.progressBar`
-- Help Modal: `.helpModal`
-- Component Container: `.componentType` (e.g., `.markdown`, `.image`)
-- Response type: `.responseType` (e.g., `.textOnly`, `.likert`)
-- Response Block Container: `.responseBlock`
-- Response Block Container with Location: `.responseBlock-location` (e.g., `responseBlock-aboveStimulus`, `responseBlock-belowStimulus`)
-- Individual Response: `.response`
-
-**ID Selectors:**
-- Component: `#componentName` (e.g., `#introduction`, `#survey-question`)
-- Response: `#responseId` (e.g., `#final-feedback`, `#user-rating`)
-
-:::info
-Styles are applied in the following order (later styles override earlier ones):
-
-1. **Global UI Styles** (`uiConfig.stylesheetPath`)
-2. **Component Styles** (`component.stylesheetPath` and `component.style`)
-3. **Response Styles** (`response.stylesheetPath` and `response.style`)
-:::
-
-### 2. Inline Styles (`style`)
-For basic styling like sizing, colors, and fonts, apply specific CSS properties directly to components or responses:
-
-```json title="public/study-name/config.json"
-"component": {
- "style": {
- "width": "800px",
- "margin": "20px auto",
- "padding": "30px",
- "backgroundColor": "#96dcf5",
- "border": "1px solid #aeaeae",
- "borderRadius": "12px"
- }
-},
-```
-
-## UIConfig Styling
-
-### Using External CSS Files
-
-Apply global styles that affect the entire study interface:
-
-```json title="public/study-name/config.json"
-"uiConfig": {
- "contactEmail": "your@email.com",
- "logoPath": "study-name/assets/logo.svg",
- "withProgressBar": true,
- "withSidebar": true,
- "stylesheetPath": "study-name/assets/globalStyle.css"
-}
-```
-
-### Examples
-
-#### Form style
-
-
-
-```json title="public/demo-style/config.json"
-"uiConfig": {
- "stylesheetPath": "demo-style/assets/style/form.css"
-},
-```
-
-```css title="public/demo-style/assets/style/form.css"
-.main {
- background-color: #f5f7fa;
-}
-
-.image {
- height: 200px;
- width: 80%;
- object-fit: cover;
- border-radius: 8px;
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
- margin: 0 auto;
-}
-
-.responseBlock {
- display: flex;
- flex-direction: column;
- gap: 20px;
-}
-
-.response {
- width: 80%;
- background-color: #ffffff;
- margin: 15px auto 0;
- padding: 20px;
- box-sizing: border-box;
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
- border: 2px solid #e3e8ed;
- border-radius: 12px;
-}
-
-label {
- margin-bottom: 10px;
-}
-
-#form-title p {
- font-size: 32px;
- font-weight: bold;
-}
-```
-
-#### Large Text
-
-
-
-```json title="public/demo-style/config.json"
-"uiConfig": {
- "stylesheetPath": "demo-style/assets/style/largeText.css"
-},
-```
-
-```css title="public/demo-style/assets/style/largeText.css"
-.studyTitle {
- font-size: 24px;
- font-weight: bold;
-}
-
-.progressBar {
- min-height: 18px;
-}
-
-.response {
- margin-bottom: 40px;
-}
-.responseBlock p {
- font-size: 24px;
-}
-
-.responseBlock input,
-.responseBlock textarea,
-.responseBlock button {
- font-size: 22px;
-}
-```
-
-## Component Styling
-
-### Using External CSS Files
-
-Components can load their own CSS files using `stylesheetPath`:
-
-```json title="public/study-name/config.json"
-"markdown-intro": {
- "type": "markdown",
- "path": "study-name/assets/introduction.md",
- "stylesheetPath": "study-name/assets/componentStyle.css",
- "response": []
-}
-```
-
-**Example CSS file**
-
-You can select components with their name. For example, if your component name is `markdown-intro`, that will be the `id` in your CSS.
-Use `#markdown-intro` to select your component. You can also use `#markdown-intro code` to select code elements inside that component.
-If you would like to target all markdown components across your study, use the class selector `.markdown`.
-
-```css title="public/study-name/assets/style/componentStyle.css"
-.markdown {
- color: blue;
-}
-
-#markdown-intro {
- background: lightblue;
- border: 1px solid #ccc;
- padding: 20px;
- border-radius: 10px;
- margin: 20px auto;
- max-width: 800px;
-}
-
-#markdown-intro code {
- background: #f8f8f8;
- padding: 2px 4px;
- border-radius: 3px;
-}
-```
-
-### Using Inline Styles
-
-Apply styles directly to component configurations:
-
-```json title="public/study-name/config.json"
-"chart": {
- "type": "image",
- "path": "assets/chart.png",
- "style": {
- "width": "500px",
- "border": "2px solid #333",
- "borderRadius": "10px",
- "margin": "20px auto",
- "boxShadow": "0 4px 8px rgba(0,0,0,0.1)"
- },
- "response": []
-}
-```
-
-### Component Styling Examples
-
-#### Markdown Component styling
-
-
-
-```json title="public/study-name/config.json"
-"components": {
- "introduction": {
- "type": "markdown",
- "path": "study-name/assets/introduction.md",
- "stylesheetPath": "study-name/assets/style/introductionStylesheet.css",
- "response": []
- }
-}
-```
-
-```css title="public/study-name/assets/style/introductionStylesheet.css"
-.markdown {
- background-color: #f1f1f1;
- padding: 30px;
- border-radius: 10px;
- margin: 20px auto;
-}
-
-#introduction h2 {
- font-family: "Gill Sans", sans-serif;
- font-weight: 700;
-}
-
-#introduction code {
- color: #0079cd;
-}
-```
-
-#### Image Component Styling
-
-
-
-```json title="public/demo-style/config.json"
-"components": {
- "chart": {
- "type": "image",
- "path": "demo-style/assets/image.png",
- "response": [
- {
- "id": "image-component-style",
- "prompt": "The style of this image component is `width: 500px`, `border: 1px solid black`, `margin: 30px auto`.",
- "type": "textOnly",
- "location": "aboveStimulus"
- }
- ],
- "style": {
- "width": "500px",
- "border": "1px solid black",
- "margin": "30px auto"
- }
- }
-}
-```
-
-#### Vega Component Styling
-
-
-
-```json title="public/demo-style/config.json"
-"components": {
- "vega-component": {
- "type": "vega",
- "path": "demo-style/specs/vegademo1.specs.json",
- "response": [
- {
- "id": "vega-path-component-style",
- "prompt": "The style of this vega component is `width: 500px`, `margin: 30px auto`, `padding: 16px`, `backgroundColor: #e4f5f7`, `border: 3px solid #ccc`, `border-radius: 10px`.",
- "type": "textOnly",
- "location": "aboveStimulus"
- }
- ],
- "style": {
- "width": "500px",
- "margin": "30px auto",
- "padding": "16px",
- "backgroundColor": "#e4f5f7",
- "border": "3px solid #ccc",
- "borderRadius": "10px"
- }
- }
-}
-```
-
-## Response Styling
-
-### Using External CSS Files
-
-Responses can have their own stylesheets. You can target them using their type (as a class) or by their specific id.
-- To select a specific response, use its `id` (e.g., `#final-feedback`).
-- To target responses by `type`, use the class name (e.g., `.likert`, `.textOnly`).
-- Use `.responseBlock` to select the whole block that holds the responses.
-- Use `.response` to target any individual response element across the study.
-
-```json title="public/demo-style/config.json"
-"components": {
- "component": {
- ...
- "response": [
- {
- "id": "user-feedback",
- "prompt": "Rate your experience:",
- "type": "likert",
- "numItems": 5,
- "leftLabel": "Poor",
- "rightLabel": "Excellent",
- "stylesheetPath": "demo-style/assets/style/responseStyle.css",
- "location": "belowStimulus"
- }
- ]
- }
-}
-```
-
-```css title="public/demo-style/assets/style/responseStyle.css",
-#user-feedback {
- background: #f8f9fa;
- border: 1px solid #dee2e6;
- padding: 15px;
- border-radius: 8px;
- margin: 10px 0;
-}
-
-.likert{
- background: #e9ecef;
- border-radius: 4px;
- padding: 8px 12px;
-}
-```
-
-### Using Inline Styles
-
-Apply styles directly to response configurations:
-
-```json title="public/demo-style/config.json"
-"components": {
- "component": {
- ...
- "response": [
- {
- "id": "user-comments",
- "prompt": "Additional comments:",
- "type": "longText",
- "placeholder": "Share your thoughts...",
- "location": "belowStimulus",
- "style": {
- "width": "100%",
- "maxWidth": "600px",
- "margin": "20px auto",
- "padding": "15px",
- "border": "1px solid #ccc",
- "borderRadius": "6px",
- "backgroundColor": "#fafafa"
- }
- }
- ]
- }
-}
-```
-
-### Response Styling Examples
-
-#### Text Response Styling
-
-
-
-```json title="public/demo-style/config.json"
-"response": [
- {
- "id": "short-text-response-style",
- "prompt": "What's your favorite color?",
- "type": "shortText",
- "location": "belowStimulus",
- "placeholder": "Enter your favorite color",
- "required": false,
- "style": {
- "fontFamily": "'Courier New', monospace",
- "width": "700px",
- "margin": "25px auto",
- "padding": "10px",
- "letterSpacing": "2px"
- }
- },
- {
- "id": "long-text-response-style",
- "type": "longText",
- "prompt": "What makes a website design effective and visually appealing?",
- "location": "belowStimulus",
- "placeholder": "Enter your answer",
- "required": false,
- "style": {
- "width": "700px",
- "margin": "25px auto",
- "padding": "15px",
- "border": "2px solid green",
- "borderRadius": "10px",
- "backgroundColor": "#f8fff9",
- "color": "green",
- "fontStyle": "italic",
- "fontWeight": "600",
- "textTransform": "lowercase"
- }
- }
-]
-```
-
-#### Interactive Response Styling
-
-You can also make responses interactive using CSS. For example, you can change the background color when a user clicks on a response. You might also make the text appear larger when the user starts typing. Adding interactions like these can improve the overall usability of your study.
-
-
-
-```json title="public/demo-style/config.json"
-"interactive-responses": {
- "type": "markdown",
- "path": "demo-style/assets/responseStylesheet.md",
- "response": [
- {
- "id": "likert-response",
- "prompt": "Try clicking on the background of this response and see what happens.",
- "type": "likert",
- "location": "belowStimulus",
- "numItems": 5,
- "leftLabel": "Needs improvement",
- "rightLabel": "Excellent design",
- "required": false,
- "stylesheetPath": "demo-style/assets/style/responseStylesheet.css"
- },
- {
- "id": "short-text-response",
- "prompt": "Try hovering on this response block.",
- "type": "shortText",
- "location": "belowStimulus",
- "required": false,
- "stylesheetPath": "demo-style/assets/style/responseStylesheet.css"
- },
- {
- "id": "final-feedback",
- "prompt": "Please provide any feedback on this styling demo.",
- "type": "longText",
- "location": "belowStimulus",
- "placeholder": "Your feedback",
- "required": false,
- "stylesheetPath": "demo-style/assets/style/responseStylesheet.css"
- }
- ]
-},
-```
-
-```css title="public/demo-style/assets/style/responseStylesheet.css"
-.responseBlock {
- display: flex;
- flex-direction: column;
- align-items: center;
-}
-
-#likert-response {
- border: 1px solid black;
- padding: 10px;
- border-radius: 10px;
- margin: 10px;
- width: 70%;
- color: #333333;
- transition: background 0.3s ease-in-out, color 0.3s ease-in-out, width 0.3s ease-in-out;
-}
-
-#likert-response:hover {
- width: 100%;
-}
-
-#likert-response:active {
- background: #000000;
- color: #ffffff;
-}
-
-#short-text-response {
- padding: 20px;
- margin: 15px;
- background-color: #e5f3fd;
- border-radius: 15px;
- transition: all 0.3s ease-in-out;
-}
-
-#short-text-response:hover {
- transform: scale(1.02);
- box-shadow: 0 15px 40px #9abddc;
-}
-
-#short-text-response input {
- border: none;
- border-radius: 10px;
- margin: 12px auto;
-}
-
-#final-feedback {
- width: 80%;
- padding: 20px;
- margin: 20px auto;
- background-color: #e5f3fd;
- border-radius: 15px;
- transition: all 0.5s ease;
-}
-
-#final-feedback textarea {
- border: none;
- margin: 12px auto;
- transition: all 0.3s ease;
-}
-
-#final-feedback textarea:focus {
- font-size: 20px;
- letter-spacing: 1px;
- transform: scale(1.01);
- animation: typing-glow 1.5s ease-in-out infinite;
-}
-
-@keyframes typing-glow {
- 0%, 100% {
- box-shadow: 0 15px 40px #9abddc;
- }
- 50% {
- box-shadow: 0 25px 80px #9abddc, 0 0 30px #9abddc, inset 0 0 20px rgba(154, 189, 220, 0.3);
- }
-}
-```
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/designing-studies/device-restrictions.md b/versioned_docs/version-v2.4.1/designing-studies/device-restrictions.md
deleted file mode 100644
index 03e767831a..0000000000
--- a/versioned_docs/version-v2.4.1/designing-studies/device-restrictions.md
+++ /dev/null
@@ -1,221 +0,0 @@
-# Device Restrictions
-
-ReVISit lets you control whether participants can enter a study based on screen size, browser version, device type, and input method.
-These checks are configured in `studyRules`.
-
-## Configuring Study Rules
-
-`studyRules` supports:
-
-- `display`: allowed display sizes
-- `browsers`: allowed browser names and optional minimum versions
-- `devices`: allowed device types (`desktop`, `tablet`, `mobile`)
-- `inputs`: allowed input types (`mouse`, `touch`)
-
-:::note
-`minWidth` and `minHeight` are now configured under `studyRules.display` instead of `uiConfig`.
-
-The previous properties `minWidthSize` and `minHeightSize` have been renamed to `minWidth` and `minHeight`. The `minWidthSize` and `minHeightSize` property is now removed and should no longer be used.
-:::
-
-The following snippet shows how to configure device restrictions:
-
-```json title="public/study-name/config.json"
-"studyRules": {
- "display": {
- "minHeight": 400,
- "minWidth": 800
- },
- "browsers": {
- "allowed": [
- {
- "name": "chrome",
- "minVersion": 100
- },
- {
- "name": "firefox",
- "minVersion": 100
- },
- {
- "name": "safari",
- "minVersion": 10
- }
- ],
- "blockedMessage": "You must be on a relatively modern browser, Chrome > 100, Firefox > 100, Safari > 10."
- },
- "devices": {
- "allowed": ["tablet", "desktop", "mobile"]
- },
- "inputs": {
- "allowed": ["touch", "mouse"]
- }
-}
-```
-
-## How It Works
-
-When a participant starts the study, reVISit validates the participant environment against `studyRules`.
-If requirements are not met, a blocking screen is shown with the rule that failed.
-
-## Setting Display Requirements
-
-You can restrict your study to specific screen-size requirements to ensure participants use a supported display.
-
-Configure display restrictions in the `studyRules` section. Use `studyRules.display` to define minimum and optional maximum screen dimensions.
-
-```json title="public/study-name/config.json"
-"studyRules": {
- "display": {
- "minHeight": 600,
- "minWidth": 1024,
- "maxHeight": 1440,
- "maxWidth": 2560,
- "blockedMessage": "This study requires a screen between 1024x600 and 2560x1440."
- }
-}
-```
-
-For display-size checks, participants see a warning screen with a one-minute countdown timer showing current and required dimensions.
-
-The participant has one minute to resize their browser window. During this time, reVISit continuously monitors the window size. Once both the width and height meet the requirements, the warning disappears and the study begins.
-
-If the timer runs out and the screen is still too small, the participant will see a training failed page and will not be able to continue the study.
-
-In the participant table, the participant will be listed as rejected with the reason "Screen resolution requirements not met."
-
-
-
-## Setting Browser Requirements
-
-You can restrict your study to specific browsers and their minimum versions to ensure compatibility with your study design.
-
-Configure browser restrictions in the `studyRules` section:
-
-```json title="public/study-name/config.json"
-"studyRules": {
- "browsers": {
- "allowed": [
- {
- "name": "chrome",
- "minVersion": 100
- },
- {
- "name": "firefox",
- "minVersion": 100
- },
- {
- "name": "safari",
- "minVersion": 15
- }
- ],
- "blockedMessage": "This study requires Chrome, Firefox, or Safari with the minimum versions specified."
- }
-}
-```
-
-You can specify browser restrictions for:
-- `chrome`
-- `firefox`
-- `safari`
-- `edge`
-
-Each browser can have an optional `minVersion` to ensure participants have a recent version with necessary features.
-
-## Setting Device Type Requirements
-
-You can control which device types (desktop, tablet, mobile) can access your study based on your research needs.
-
-Configure device type restrictions in the `studyRules` section:
-
-```json title="public/study-name/config.json"
-"studyRules": {
- "devices": {
- "allowed": ["desktop", "tablet", "mobile"],
- "blockedMessage": "This study requires a desktop or tablet device."
- }
-}
-```
-
-The `allowed` array specifies which device types can participate. You can include any combination of:
-- `desktop`
-- `tablet`
-- `mobile`
-
-## Setting Input Requirements
-
-You can specify which input methods your study supports, such as mouse and/or touch input.
-
-Configure input restrictions in the `studyRules` section:
-
-```json title="public/study-name/config.json"
-"studyRules": {
- "inputs": {
- "allowed": ["mouse", "touch"],
- "blockedMessage": "This study requires a device with mouse or touch input capability."
- }
-}
-```
-
-The `allowed` array specifies which input methods are supported:
-- `mouse` - Mouse or trackpad input
-- `touch` - Touch input (touchscreen or touch-enabled device)
-
-## Example
-
-Here's a complete example combining all restriction types:
-
-```json title="public/study-name/config.json"
-"studyRules": {
- "display": {
- "minHeight": 400,
- "minWidth": 800
- },
- "browsers": {
- "allowed": [
- {
- "name": "chrome",
- "minVersion": 100
- },
- {
- "name": "firefox",
- "minVersion": 100
- },
- {
- "name": "safari",
- "minVersion": 10
- }
- ],
- },
- "devices": {
- "allowed": ["tablet", "desktop", "mobile"]
- },
- "inputs": {
- "allowed": ["touch"],
- "blockedMessage": "Only touch devices are supported"
- }
-},
-```
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/designing-studies/forms.md b/versioned_docs/version-v2.4.1/designing-studies/forms.md
deleted file mode 100644
index f540b7f343..0000000000
--- a/versioned_docs/version-v2.4.1/designing-studies/forms.md
+++ /dev/null
@@ -1,508 +0,0 @@
-# Designing Forms
-
-Form elements are essential for most studies to capture user [responses](../typedoc/interfaces/BaseResponse.md). ReVISit provides rich form elements, such as [sliders](../typedoc/interfaces/SliderResponse.md), [checkboxes](../typedoc/interfaces/CheckboxResponse.md), text fields, etc., so that you can efficiently design your forms.
-
-This tutorial does not give a comprehensive introduction into all form elements. For this, refer to the demo and other links in the relevant links panel. Instead, we introduce some high-level principles that apply to all form elements.
-
-## Principles
-
-Form elements are components of type `questionnaire`. Here is a simple example with a drop-down element:
-
-```json title="public/study-name/config.json"
-"components": {
- "survey": {
- "type": "questionnaire",
- "response": [
- {
- "id": "q-dropdown",
- "prompt": "Dropdown example – which chart do you like best?",
- "secondaryText": "You can specify secondary text to clarify your question.",
- "infoText": "Select the chart type you prefer from the dropdown menu.",
- "location": "aboveStimulus",
- "type": "dropdown",
- "placeholder": "Enter your preference",
- "options": [
- "Bar",
- "Bubble",
- "Pie",
- "Stacked Bar"
- ]
- }
- ]
- }
-}
-```
-
-This renders like that:
-
-
-
-In this example, the drop-down is rendered in the main window, as indicated by the `"location": "aboveStimulus"` line. As documented in the [`BaseResponse`](../../typedoc/interfaces/BaseResponse/), the other options are `sidebar` and `belowStimulus`.
-
-Form elements can be placed either in a sidebar, or as the main content of a study page. The sidebar version is useful if you're showing another kind of stimulus in the main part of the window. The main page location is useful for stand-alone survey questions, or if you want to integrate your response with your stimulus.
-
-Because form elements are so commonly combined with other stimuli, a standalone questionnaire component as shown above is just a stripped down component with "only" a response.
-
-:::note
-You can also add form-based responses to all other stimuli using exactly the same syntax!
-:::
-
-## Notable Features
-
-Below we list some notable features that apply to all or most form elements.
-
-### Prompts and Descriptions
-
-Each form element requires a `prompt` that introduces the question. You can also provide a more detailed description in `secondaryText` that is shown below the prompt; both are demonstrated in the above example.
-
-### Additional Descriptions
-
-The `infoText` allows you to provide additional description for survey questions or response options that appears when participants hover over an information icon. This helps clarify questions or scales while keeping the `prompt` simple.
-
-
-:::info
-For response option, `infoText` is only supported in `button`, `checkbox`, `radio`, `dropdown`, `matrix` and `ranking` responses.
-:::
-
-### Required Fields
-
-You can make a field required, in which case a red star is rendered (see above) and it is necessary that a response is given before the "Next" button is activated and the participant can proceed. Required is the default, set `"required": false` if an answer is optional.
-
-You can also force participants to provide a specific answer value using `requiredValue`. This is useful for attention checks, training tasks, or ensuring participants read instructions carefully. The participant must provide an exact match with the specified value to proceed.
-
-For single-select responses (`radio`, `shortText`, `longText`, `numerical`, etc.), `requiredValue` requires an exact match:
-
-```json title="public/study-name/config.json"
-{
- "id": "accept",
- "prompt": "Do you consent to the study and wish to continue?",
- "requiredValue": "Accept",
- "location": "belowStimulus",
- "type": "radio",
- "options": [
- "Decline",
- "Accept"
- ]
-}
-```
-
-For multi-select responses (`checkbox`, `dropdown` with multiple selections), `requiredValue` can be an array of values that must all be selected:
-
-```json title="public/study-name/config.json"
-{
- "id": "multi-check",
- "prompt": "Please select both Option 1 and Option 2",
- "type": "checkbox",
- "options": ["Option 1", "Option 2", "Option 3"],
- "requiredValue": ["Option 1", "Option 2"]
-}
-```
-
-When using `requiredValue` with arrays, the system checks that the participant has selected exactly the specified values, in any order. If the participant selects different values or a different number of values, they will see a message asking them to select the required options.
-
-The `requiredLabel` property is similar to `requiredValue` but is more user-friendly. Instead of matching against the value stored in the data, it matches against the label displayed to participants. This is particularly useful when options have both labels and values, as it allows you to specify requirements using the human-readable label.
-
-```json title="public/study-name/config.json"
-{
- "id": "attention-check",
- "prompt": "Please select 'I agree' to continue",
- "type": "radio",
- "options": [
- { "label": "I agree", "value": "agree" },
- { "label": "I disagree", "value": "disagree" }
- ],
- "requiredLabel": "I agree"
-}
-```
-
-### "Don't Know" Option
-
-You can explicitly allow participants to state that they don't know the response with a dedicated checkbox:
-
-
-To achieve that, add the `"withDontKnow": true` option to your form element.
-
-### Dividers
-
-You can structure your forms by adding a divider between form elements. This is useful when your study has multiple topics or transitioning between different types of tasks. To add a divider, add `"withDivider": true` to the question that you want the divider to appear after. In the following figure, there's a divider added between question 1 and 2.
-
-```json title="public/study-name/config.json"
-"response": [
- {
- "id": "q-likert",
- "type": "likert",
- "numItems": 9,
- ...
- "withDivider": true
- }
-]
-```
-
-Alternatively, if you want to position dividers independently of specific questions, you can use [`DividerResponse`](/docs/typedoc/interfaces/DividerResponse.md) as a standalone response element.
-
-```json title="public/study-name/config.json"
-"components": {
- ...
- "barChart": {
- ...
- "response": [
- {
- "id": "divider",
- "type": "divider"
- }
- ]
- }
-}
-```
-
-
-
-### Enumerating Questions
-
-You can automatically number questions by setting `"enumerateQuestions": true`. This will prepend each question with its index number (starting from 1). This feature should only be used when all questions are in the same location (e.g., all questions are in the sidebar).
-
-
-
-### Radio and Checkbox Features
-
-Radio buttons and checkboxes have some shared noteworthy features. Here is an example showing different configurations of radio buttons:
-
-
-
-#### Vertical and Horizontal Layouts
-
-Radios and checkboxes can be rendered either vertically (the default) or horizontally. The above figure shows radios for both. Set `"horizontal": true` to get the horizontal version.
-
-#### "Other" Option
-
-You can allow an "other" option for radios and checkboxes, as shown for the first radio group above. To enable that, set `"withOther": true`.
-
-#### Selection Requirements for Checkboxes
-
-For checkboxes, you can specify the minimum and maximum number of selections required using `minSelections` and `maxSelections`. These properties control how many options must be selected before the participant can proceed.
-
-```json title="public/study-name/config.json"
-{
- "id": "checkbox-min",
- "prompt": "Select at least 2 options",
- "type": "checkbox",
- "options": ["Option 1", "Option 2", "Option 3", "Option 4"],
- "minSelections": 2
-}
-```
-
-### Matrix Features
-
-Matrix questions let you ask several questions at the same time, using the same set of answer choices. You can either provide your own custom answers or use our built-in answer options.
-
-Built-in options include:
-
-- `likely5` or `likely7`: ranges from Highly Unlikely to Highly Likely
-- `satisfaction5` or `satisfaction7`: ranges from Highly Unsatisfied to Highly Satisfied
-
-Here is an example of Matrix Radio questions using `"answerOptions": "likely7"` and `"answerOptions": "satisfaction5"`.
-
-
-
-If any question in the matrix is left unanswered, participants will see a validation message: "Please answer all questions in the matrix to continue."
-
-
-
-### Dropdown Features
-
-A dropdown allows participants to choose one or more from a list. By default, they can only pick one item. If you want to allow multiple selections, add `minSelections` or `maxSelections` and the dropdown will then automatically become a multiselect dropdown.
-
-
-
-When `minSelections` or `maxSelections` are specified for a dropdown, it automatically becomes a multiselect dropdown, allowing participants to choose multiple options.
-
-Example with minimum selections:
-
-```json title="public/study-name/config.json"
-{
- "id": "dropdown-multi",
- "prompt": "Select at least 2 options",
- "type": "dropdown",
- "options": ["Option 1", "Option 2", "Option 3", "Option 4"],
- "minSelections": 2
-}
-```
-
-Example with both minimum and maximum:
-
-```json title="public/study-name/config.json"
-{
- "id": "dropdown-range",
- "prompt": "Select between 2 and 3 options",
- "type": "dropdown",
- "options": ["Option 1", "Option 2", "Option 3", "Option 4"],
- "minSelections": 2,
- "maxSelections": 3
-}
-```
-
-### Likert Features
-
-A Likert response allows participants to rate something on a scale. You can customize the scale in several ways -- you can set where the scale starts, how large the steps between values are, the label locations, and how many options it has.
-
-For example, here is a Likert example with `"start": 1`, `"spacing": 2`, and `"numItems": 10`.
-
-
-
-You can control the label location in Likert responses to better fit your layout. The `labelLocation` property supports multiple options: `above`, `inline` (default), and `below`. The `above` and `below` options are useful when the width of the section containing the Likert question is limited and the `inline` layout does not work well.
-
-
-
-### Numerical Response Features
-
-Numerical response inputs support `min` and `max` fields that define the acceptable range of values for the answer. These constraints help ensure that participants provide values within the expected bounds, and warnings will be displayed if their input falls outside this range.
-
-```json title="public/study-name/config.json"
-{
- "id": "q-numerical",
- "prompt": "Numerical example",
- "location": "aboveStimulus",
- "type": "numerical",
- "placeholder": "Enter your age, range from 0 - 120",
- "max": 120,
- "min": 0
-}
-```
-
-The `min` and `max` properties work together to define a range. When participants enter values outside this range, they will see a warning message indicating the acceptable range.
-
-
-
-You can also define a range of acceptable answers using the `acceptableLow` and `acceptableHigh` properties in the `Answer` interface. This is particularly useful for numerical answers where you want to accept values within a certain range rather than requiring an exact match.
-
-```json title="public/study-name/config.json"
-{
- "correctAnswer": [{
- "id": "q-numerical",
- "answer": 5,
- "acceptableLow": 4,
- "acceptableHigh": 6
- }]
-}
-```
-
-For example, if the correct answer is 5, and you set `acceptableLow` to 4 and `acceptableHigh` to 6, then any answer between 4 and 6 (inclusive) will be considered correct. This is useful for questions where there might be slight variations in correct answers, or where you want to account for rounding or measurement precision.
-
-### Slider Features
-
-A slider response lets participants pick a value by moving a handle on a line. You can change how the slider works by setting where it starts, how big each step is, and how far apart the tick marks are.
-Here is a slider example with `"step": 10` and `"spacing": 10`.
-
-
-
-You can also hide the label above the handle by using `snap`, and choose whether to show the bar with `withBar`.
-The example below shows a slider with `"snap": true` and `"withBar": false`.
-
-
-
-### Ranking Widget Features
-
-A ranking widget allows participants to order or group items rather than simply selecting them. They are useful when you want to capture relative preferences, priorities, or categories of interest.
-
-#### The "numItems" option
-
-For sublist and categorical rankings, you can use the `numItems` option to control how many items participants must assign:
-
-- In a sublist, `numItems` sets how many items they have to rank (e.g., top 2 out of 5).
-- In a categorical ranking, `numItems` can limit how many items may be placed in each category (e.g., only 3 items per category).
-
-:::info
-The `numItems` option cannot be used in pairwise rankings, since their purpose is to compare and rank items by pairs.
-:::
-
-This option is useful when you want participants to focus on their strongest preferences rather than distributing all items.
-
-
-
-## Randomization of form elements
-
-Randomizing the order of answers or questions can help reduce bias and improve the quality of your study results. ReVISit allows you to shuffle options within a question, or even the order of entire questions on a page.
-
-A die icon is shown in the sidebar to indicate that at least one item on this page has a randomized order.
-
-
-
-Each participant will see their own consistent order during the study, and the same order is recorded and shown in the replay, so you can always see exactly what they saw.
-
-### Randomizing Matrix Checkbox, Matrix Radio
-
-For matrix questions (e.g., matrix radio or matrix checkbox), you can randomize the questions. Set `"questionOrder": "random"` to randomize questions.
-
-Here is an example to show how to set up questions in random order:
-
-```json title="public/study-name/config.json"
-"response": [
- {
- "id": "5items-response",
- "prompt": "To what extent do you agree that this visual representation is...?",
- "location": "belowStimulus",
- "type": "matrix-radio",
- "answerOptions": "satisfaction5",
- "questionOrder": "random", // Set randomization here
- "questionOptions": [
- "enjoyable",
- "likable",
- "pleasing",
- "nice",
- "appealing"
- ]
- }
-]
-```
-
-
-
-### Randomizing Checkbox, Radio, Button
-
-To shuffle the options in a radio, checkbox, or button question, set `"optionOrder": "random"`.
-
-Here is an example to show how to set up options in random order:
-
-```json title="public/study-name/config.json"
-"response": [
- {
- "id": "fruitPreference",
- "prompt": "What’s your favorite fruit?",
- "location": "aboveStimulus",
- "type": "radio",
- "optionOrder": "random", // Set randomization here
- "options": [
- "Apple",
- "Banana",
- "Grape"
- ]
- }
-]
-```
-
-
-
-### Randomizing form elements in a single page
-
-You can randomize the order of multiple questions that appear on the same page by setting `"responseOrder": "random"`, which will shuffle the order in which the form elements themselves appear on the page. In some cases, however, you may want certain responses to stay in a fixed position. To exclude a specific response from randomization, set `"excludeFromRandomization": true` on that response element. This setting overrides the component-level `responseOrder` configuration and ensures the specified response maintains its original position while other responses are randomized.
-
-Here is an example to show how to set up responses in random order:
-
-```json title="public/study-name/config.json"
-"survey_randomized_form": {
- "type": "questionnaire",
- "responseOrder": "random", // Set randomization here
- "response": [
- {
- "id": "demographics",
- "prompt": "What is your gender?",
- "type": "shortText",
- "placeholder": "Enter your answer",
- "excludeFromRandomization": true // Exclude from randomization here
- },
- {
- "id": "duration",
- "prompt": "How long have you used this website?",
- "type": "shortText",
- "placeholder": "Enter your answer"
- },
- {
- "id": "favoriteFeature",
- "prompt": "What's your favorite feature?",
- "type": "shortText",
- "placeholder": "Enter your answer"
- },
- {
- "id": "recommend",
- "prompt": "Would you recommend our app?",
- "type": "dropdown",
- "options": [
- "Yes",
- "No"
- ]
- }
- ]
-}
-```
-If the form is randomized, a die icon will appear in the sidebar to indicate that the response order is random.
-
-
-
-## Sidebar Configuration
-
-The sidebar is a left panel that can be used to display form elements alongside your stimulus. This is particularly useful when you want participants to see both the stimulus and the questions simultaneously.
-
-### Enabling the Sidebar
-
-To use the sidebar, you must set `"withSidebar": true` in your component or globally in the `uiConfig`. The sidebar is required if any of your responses have `"location": "sidebar"`.
-
-```json title="public/study-name/config.json"
-"components": {
- "survey": {
- "type": "questionnaire",
- "withSidebar": true,
- "response": [
- {
- "id": "q-sidebar",
- "prompt": "Rate this visualization",
- "location": "sidebar",
- "type": "likert",
- "numItems": 5
- }
- ]
- }
-}
-```
-
-### Sidebar Width
-
-You can customize the width of the sidebar by setting `"sidebarWidth"` (in pixels). The default width is 300 pixels. This can be set globally in `uiConfig` or overridden on individual components.
-
-```json title="public/study-name/config.json"
-"components": {
- "survey": {
- "type": "questionnaire",
- "withSidebar": true,
- "sidebarWidth": 400,
- "response": [
- {
- "id": "q-sidebar",
- "prompt": "Rate this visualization",
- "location": "sidebar",
- "type": "likert",
- "numItems": 5
- }
- ]
- }
-}
-```
-
-For more details on sidebar configuration, see the [`UIConfig`](../../typedoc/interfaces/UIConfig/) and [`BaseIndividualComponent`](../../typedoc/interfaces/BaseIndividualComponent/) documentation.
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/designing-studies/html-stimulus.md b/versioned_docs/version-v2.4.1/designing-studies/html-stimulus.md
deleted file mode 100644
index bb046f420c..0000000000
--- a/versioned_docs/version-v2.4.1/designing-studies/html-stimulus.md
+++ /dev/null
@@ -1,151 +0,0 @@
-# Designing an HTML Stimulus
-
-Now, we will take the study we just created and add another component based on a user-created HTML file. This allows for some additional customization of the component.
-
-## HTML Stimuli
-
-The HTML code below uses the extensive D3.js library. It renders a simple, horizontal bar chart. Copy and paste this HTML into a document called `bar-chart.html` in the `basic-questionnaire-study/assets` directory.
-
-```html title="public/basic-questionnaire-study/assets/bar-chart.html"
-
-
-
-
- D3 Nice Axes
-
-
-
-
-
-
-
-
-
-
-
-```
-
-One of the interesting pieces of the above code is that this HTML document interacts with reVISit in a two-way fashion. Firstly, note that the script to render the bar chart is wrapped in the `Revisit.onDataReceive` function. This listens for data that is passed to the HTML document via the `parameters` key in the configuration of the component. You will see shortly how we can use this HTML document as a template for multiple components with different datasets.
-
-Furthermore, you’ll see that we have also created an `onClick` function and attached it to each of the bars in the bar graph. This click function uses the `Revisit.postAnswers` method to send information back to reVISit.
-
-Now that we have this HTML document in our study directory, we are ready to adjust our `config.json` file to account for these new components.
-
-In your `config.json` document, create new key called `baseComponents` as a sibling to the keys `uiConfig`, `components`, `sequence`, etc. In this newly created key, paste the code below:
-
-```json title="public/basic-questionnaire-study/config.json"
-"baseComponents": {
- "bar-chart": {
- "type": "website",
- "response": [
- {
- "id": "barChart",
- "prompt": "Your selected answer:",
- "required": true,
- "location": "belowStimulus",
- "type": "reactive"
- }
- ],
- "path": "basic-questionnaire-study/assets/bar-chart.html",
- "instructionLocation": "aboveStimulus"
- }
-}
-```
-This creates a component that new components can be based off of. Each component using the `bar-chart` as the value to the `baseComponent` key will now automatically have the above key-value pairs included. In other words, there is no need to specify the type, response, path, or instruction location when creating these next components.
-
-In the components section, add the following objects:
-
-```json title="public/basic-questionnaire-study/config.json"
-"bar-chart-1":{
- "baseComponent": "bar-chart",
- "description": "A trial for the user to click the largest bar",
- "instruction": "Click on the largest bar",
- "parameters": {
- "barData": [0.32, 0.01, 1.2, 1.3, 0.82, 0.4, 0.3]
- }
-},
-"bar-chart-2":{
- "baseComponent": "bar-chart",
- "description": "A trial for the user to click the smallest bar",
- "instruction": "Click on the smallest bar",
- "parameters": {
- "barData": [1.2, 1.2, 1.2, 1.3, 0.82, 0.4, 0.3]
- }
-}
-```
-The `parameters` key is a dynamically valued key which is used to pass data to your components. When you add the `parameters` key, any data contained within the object will be sent via the event bus as a message to the component. Since we designed the HTML above to listen for this message, we were able to parse these parameters and use them as variables to control the sizes of the various bar charts.
-
-To finish this tutorial, add these two components (`bar-chart-1` and `bar-chart-2` to the sequence in `config.json`).
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/designing-studies/image-video-stimulus.md b/versioned_docs/version-v2.4.1/designing-studies/image-video-stimulus.md
deleted file mode 100644
index f252804bb2..0000000000
--- a/versioned_docs/version-v2.4.1/designing-studies/image-video-stimulus.md
+++ /dev/null
@@ -1,102 +0,0 @@
-# Designing Image/Video Stimuli
-
-Image and video stimuli are essential for most studies. They can be used to present visual information, such as charts, images, or videos, to participants. This tutorial provides an overview of how to use image and video stimuli in your study.
-
-## Image Stimuli
-
-Image stimuli are components of type `image`. Here is a simple example with an image element:
-
-```json title="public/demo-image/config.json"
-"components": {
- "dotplot-low": {
- "type": "image",
- "path": "demo-image/assets/uncertainty-1.png",
- "instruction": "Will you issue blankets to the alpacas?",
- "style": {
- "width": "800px"
- },
- "nextButtonLocation": "sidebar",
- "response": [
- {
- "id": "demo-image/assets-response",
- "prompt": "Answer:",
- "location": "sidebar",
- "type": "radio",
- "options": [
- "Yes",
- "No"
- ]
- }
- ]
- }
-}
-```
-
-This renders like that:
-
-
-
-In this example, the image is rendered in the main window with a response in the sidebar. The image is given an optional parameter [`style`](./applying-style.md) to specify the width of the image. This object supports arbitrary CSS properties.
-
-## Video Stimuli
-
-### Internal Videos
-
-Video stimuli are components of type `video`. Here is a simple example with a video element:
-
-```json title="public/demo-video/config.json"
-"components": {
- "internal": {
- "type": "video",
- "path": "demo-video/assets/venice.mp4",
- "forceCompletion": true,
- "response": []
- },
-}
-```
-
-This renders as so:
-
-
-
-In this example, the video is rendered in the main window. The video is given an optional parameter `forceCompletion` to specify whether the video must be watched in full before the participant can proceed. This is useful for ensuring that participants watch the entire video before answering questions.
-
-### External Videos
-
-You can also embed external videos, such as YouTube or Vimeo videos in your study, using the same syntax. Here is an example with a YouTube video element:
-
-```json title="public/demo-video/config.json"
-"components": {
- "external": {
- "type": "video",
- "path": "https://www.youtube.com/watch?v=icPHcK_cCF4",
- "forceCompletion": false,
- "withTimeline": true,
- "response": []
- },
-}
-```
-
-This renders as so:
-
-
-
-In this example, the video is rendered in the main window. The video is given an optional parameter `forceCompletion` to specify whether the video must be watched in full before the participant can proceed. In this case, the video does not need to be watched in full, so the `forceCompletion` parameter is set to `false`. The `withTimeline` parameter adds a timeline to the video, allowing participants to skip/scrub to specific parts of the video.
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/check-answer-button.png b/versioned_docs/version-v2.4.1/designing-studies/img/check-answer-button.png
deleted file mode 100644
index 71d035cc49..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/check-answer-button.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/divider.png b/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/divider.png
deleted file mode 100644
index 3c8440c013..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/divider.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/dont-know.png b/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/dont-know.png
deleted file mode 100644
index 3e3b6e62d9..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/dont-know.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/dropdown-multiselect.png b/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/dropdown-multiselect.png
deleted file mode 100644
index fc91944529..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/dropdown-multiselect.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/dropdown.png b/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/dropdown.png
deleted file mode 100644
index 09986ff398..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/dropdown.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/enumerate-questions.png b/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/enumerate-questions.png
deleted file mode 100644
index 4c7d380cce..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/enumerate-questions.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/info-text.png b/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/info-text.png
deleted file mode 100644
index 2e47c603c5..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/info-text.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/likert-label-location.png b/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/likert-label-location.png
deleted file mode 100644
index 30d682bda8..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/likert-label-location.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/likert.png b/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/likert.png
deleted file mode 100644
index 9eb80773e3..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/likert.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/matrix-answer-options.png b/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/matrix-answer-options.png
deleted file mode 100644
index 7ea05b7dac..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/matrix-answer-options.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/matrix-warning.png b/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/matrix-warning.png
deleted file mode 100644
index b332e3618d..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/matrix-warning.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/numerical-min-max.png b/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/numerical-min-max.png
deleted file mode 100644
index 8f4926b135..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/numerical-min-max.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/radio.png b/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/radio.png
deleted file mode 100644
index c4e0b5a69f..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/radio.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/random-option-icon.png b/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/random-option-icon.png
deleted file mode 100644
index e30ab2e6e3..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/random-option-icon.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/random-option.png b/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/random-option.png
deleted file mode 100644
index bcd78f6af4..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/random-option.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/random-question.png b/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/random-question.png
deleted file mode 100644
index fc77cef660..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/random-question.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/random-response.png b/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/random-response.png
deleted file mode 100644
index 54cf02b029..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/random-response.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/ranking.png b/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/ranking.png
deleted file mode 100644
index 63d4f86a36..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/ranking.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/slider-snap.png b/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/slider-snap.png
deleted file mode 100644
index 5f1bc18798..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/slider-snap.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/slider.png b/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/slider.png
deleted file mode 100644
index dd72975586..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/designing-forms/slider.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/device-check/device-not-supported.png b/versioned_docs/version-v2.4.1/designing-studies/img/device-check/device-not-supported.png
deleted file mode 100644
index e636c42146..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/device-check/device-not-supported.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/device-check/screen-resolution-not-met.png b/versioned_docs/version-v2.4.1/designing-studies/img/device-check/screen-resolution-not-met.png
deleted file mode 100644
index 499a1f0527..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/device-check/screen-resolution-not-met.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/image-stimulus.png b/versioned_docs/version-v2.4.1/designing-studies/img/image-stimulus.png
deleted file mode 100644
index d572bf5d94..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/image-stimulus.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/next-button.png b/versioned_docs/version-v2.4.1/designing-studies/img/next-button.png
deleted file mode 100644
index 71474810e4..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/next-button.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/parser-errors/errors-warnings.png b/versioned_docs/version-v2.4.1/designing-studies/img/parser-errors/errors-warnings.png
deleted file mode 100644
index c385859aa3..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/parser-errors/errors-warnings.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/previous-button.png b/versioned_docs/version-v2.4.1/designing-studies/img/previous-button.png
deleted file mode 100644
index c0f448a4e7..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/previous-button.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/react-stimulus-cleveland.png b/versioned_docs/version-v2.4.1/designing-studies/img/react-stimulus-cleveland.png
deleted file mode 100644
index 03006a7600..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/react-stimulus-cleveland.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/react-stimulus-click.png b/versioned_docs/version-v2.4.1/designing-studies/img/react-stimulus-click.png
deleted file mode 100644
index 8828142dcf..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/react-stimulus-click.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/style-form.gif b/versioned_docs/version-v2.4.1/designing-studies/img/style-form.gif
deleted file mode 100644
index b23d45f997..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/style-form.gif and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/style-image.png b/versioned_docs/version-v2.4.1/designing-studies/img/style-image.png
deleted file mode 100644
index a099d58b67..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/style-image.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/style-interactive.gif b/versioned_docs/version-v2.4.1/designing-studies/img/style-interactive.gif
deleted file mode 100644
index ebcb83491f..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/style-interactive.gif and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/style-introduction.png b/versioned_docs/version-v2.4.1/designing-studies/img/style-introduction.png
deleted file mode 100644
index 99fac7fc74..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/style-introduction.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/style-large-text.png b/versioned_docs/version-v2.4.1/designing-studies/img/style-large-text.png
deleted file mode 100644
index 3cd8038eb1..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/style-large-text.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/style-text.png b/versioned_docs/version-v2.4.1/designing-studies/img/style-text.png
deleted file mode 100644
index 637ba18845..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/style-text.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/style-vega.png b/versioned_docs/version-v2.4.1/designing-studies/img/style-vega.png
deleted file mode 100644
index 0b7dac940d..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/style-vega.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/think-aloud/click-to-record.png b/versioned_docs/version-v2.4.1/designing-studies/img/think-aloud/click-to-record.png
deleted file mode 100644
index e5f28ecfc2..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/think-aloud/click-to-record.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/training-failed.png b/versioned_docs/version-v2.4.1/designing-studies/img/training-failed.png
deleted file mode 100644
index 0d1c182555..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/training-failed.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/training-incorrect-answer.png b/versioned_docs/version-v2.4.1/designing-studies/img/training-incorrect-answer.png
deleted file mode 100644
index eceeebd073..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/training-incorrect-answer.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/vega-response.png b/versioned_docs/version-v2.4.1/designing-studies/img/vega-response.png
deleted file mode 100644
index 6b4d196471..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/vega-response.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/video-stimulus.png b/versioned_docs/version-v2.4.1/designing-studies/img/video-stimulus.png
deleted file mode 100644
index 010111bde2..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/video-stimulus.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/img/youtube-stimulus.png b/versioned_docs/version-v2.4.1/designing-studies/img/youtube-stimulus.png
deleted file mode 100644
index 8a9acf3037..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/img/youtube-stimulus.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/index.md b/versioned_docs/version-v2.4.1/designing-studies/index.md
deleted file mode 100644
index cc7cf007ab..0000000000
--- a/versioned_docs/version-v2.4.1/designing-studies/index.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# Designing Studies
-
-
-import DocCardList from '@theme/DocCardList';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/designing-studies/parser-errors.md b/versioned_docs/version-v2.4.1/designing-studies/parser-errors.md
deleted file mode 100644
index 88b331704e..0000000000
--- a/versioned_docs/version-v2.4.1/designing-studies/parser-errors.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# Parser Errors and Warnings
-
-When reVISit parses your study config file, it checks for issues that could prevent the study from running correctly. Errors will stop the parser and must be fixed before you can run your study. Warnings indicate potential problems like unused components or configuration mistakes, but they won't prevent the study from running. Errors are expanded and warnings are collapsed by default.
-
-
-
-## Errors
-
-| Category | Message | Action |
-|---|---|---|
-| Invalid Config | There was an issue validating your config file | Fix the errors in your file or make sure the global config references the right file path |
-| Invalid Library Config | Library config is not valid | Fix the errors in the library config |
-| Undefined Library | Library not found in imported libraries | Check the library name and make sure the library is imported correctly |
-| Undefined Library | Could not find library | Make sure the library is in the correct location |
-| Undefined Base Component | Base component is not defined in baseComponents object | Add the base component to the baseComponents object |
-| Undefined Base Component | Base component is not defined in baseComponents object in library | Add the base component to the baseComponents object |
-| Undefined Component | Component is not defined in components object | Add the component to the components object |
-| Sequence Validation | Component is a base component and cannot be used in the sequence | Remove the base component from the sequence |
-| Sequence Validation | Sequence not found in library| Check the sequence name |
-| Skip Validation | Skip target does not occur after the skip block it is used in | Add the target to the sequence after the skip block |
-
-
-## Warnings
-
-| Category | Message | Action |
-|---|---|---|
-| Sequence Validation | Sequence has an empty components array | Remove empty components block |
-| Unused Component | Component is defined in components object but not used deterministically in the sequence | Remove the component from the components object or add it to the sequence |
-| Disabled Sidebar | Component uses sidebar locations but sidebar is disabled | Enable the sidebar or move the location to belowStimulus or aboveStimulus |
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/designing-studies/plugin-libraries.md b/versioned_docs/version-v2.4.1/designing-studies/plugin-libraries.md
deleted file mode 100644
index 2f7ec8a9c3..0000000000
--- a/versioned_docs/version-v2.4.1/designing-studies/plugin-libraries.md
+++ /dev/null
@@ -1,338 +0,0 @@
-# ReVISit Libraries
-
-We provide predefined **libraries** of study components and validated questionnaires for visualization and HCI. These libraries are easy to integrate into your study configurations as individual components or sequences of components.
-
-We currently provide libraries for:
-
-- basic checks, such as microphone checks
-- usability and user workload assessments
-- visualization literacy checks
-- visualization quality metrics
-
-You can find details [below](#available-libraries).
-
-:::info
-When we mention "library" here, we are not referring to external libraries like NPM packages. If you'd like to use an NPM package in your study, you will need to create a React component that incorporates the package and reference that component in your study configuration.
-:::
-
-## Using Libraries in Your Study
-
-Using libraries is simple. You can import the library into your study and then use the components and/or whole sequences that are provided by the library.
-
-The libraries are in [`public/libraries`](https://github.com/revisit-studies/study/tree/main/public/libraries) folder in your study. The folder name corresponds to the library's `name`. Below are the steps for using a library.
-
-### Step 1: Import the Library
-
-To import a library, add its name to the `importedLibraries` top-level field of your study's config. For example:
-
-```json title="public/study-name/config.json"
-"components": {
- ...
-},
-"importedLibraries": [
- // Add the library names you want to import, e.g. "vlat"
- "mic-check",
- "vlat"
-]
-```
-
-### Step 2: Use Components and Sequences
-
-Libraries expose one or multiple "components" and possibly also "sequences" – predefined collections of components. You can use its components and sequences in the `sequence` section of your study configuration. The format for referencing components and sequences is:
-
-- **Components**: `$libraryName.components.componentName`
-- **Sequences**: `$libraryName.sequences.sequenceName`
-
-For example:
-
-```json title="public/study-name/config.json"
-"sequence": {
- // Configuration of the sequence for your study
- "components": [
- // List the components used in your study
- "$mic-check.components.audioTest",
- "$vlat.sequences.full"
- ]
-}
-```
-
-## Modifying Components in Existing Libraries
-
-You can modify library components in your study configuration via [inheritance](../../getting-started/how-does-it-work/#base-components-and-inheritance). Import a library with `importedLibraries`, then create a local component that inherits from a library component using `baseComponent`. Any attributes you specify will overwrite the original attributes from the plugin library. Libraries are located at `public/libraries/library-name/config.json`.
-
-Here's an example adding a new `instruction` to the `mini-vlat` library's `treemap` component:
-
-```json title="public/study-name/config.json"
-"importedLibraries": ["mini-vlat"],
-"components": {
- "mini-vlat-treemap-modified": {
- "baseComponent": "$mini-vlat.components.treemap",
- "instruction": "new instruction"
- }
-},
-"sequence": {
- "order": "fixed",
- "components": [
- "mini-vlat-treemap-modified",
- ...
- ]
-}
-```
-
-Here's another example overriding the sidebar setting:
-
-```json title="public/study-name/config.json"
-"importedLibraries": ["sam"],
-"components": {
- "sam-pleasure-no-sidebar": {
- "baseComponent": "$sam.components.pleasure",
- "withSidebar": true,
- "nextButtonLocation": "belowStimulus"
- }
-},
-"sequence": {
- "order": "fixed",
- "components": ["sam-pleasure-no-sidebar"]
-}
-```
-
-Inherited values can be changed at the component level, such as `withSidebar`, `nextButtonLocation`, and `instructionLocation`.
-
-## Creating your Own Plugins
-
-Beyond the libraries we provide, you can also define your own plugins in your study.
-
-A natural starting point for creating libraries is if you find yourself creating components that could be re-used across your own studies, or be shared with the broader community. Let's say you have two custom created components, `A.tsx` and `B.tsx`, and you want to turn them into a plugin library.
-
-Here is an overview of the folders you will be creating:
-
-```
-study/
-|- public/
-| |- basic-questionnaire-study/
-| |- ...
-| |- libraries/
-| |- adaptive-vlat/
-| |- ...
-| |- my-plugin/ <- NEW FOLDER (STEP 2)
-| |- ...
-| |- library-adaptive-vlat/
-| |- ...
-| |- library-my-plugin/ <- NEW FOLDER (STEP 3)
-|- src/
-| |- analysis/
-| |- ...
-| |- public/
-| |- demo-html/
-| |- ...
-| |- libraries/
-| |- mini-vlat/
-| |- ...
-| |- my-plugin/assets/ <- NEW FOLDER (STEP 1)
-```
-
-Suppose you create a new plugin library called `my-plugin`.
-
-1. **STEP 1**. Create a folder: `src/public/libraries/my-plugin/assets`.
- - The components that will make up your library, e.g., `A.tsx`, `B.tsx` as well as any image or video files that go into these components, will sit in this folder.
-2. **STEP 2**. Create a folder: `public/libraries/my-plugin`.
- - Initialize a `config.json` file within this newly created folder. This `config.json` should follow [LibraryConfig](https://revisit.dev/docs/typedoc/interfaces/LibraryConfig/).
-3. **STEP 3**. Create a folder: `public/library-my-plugin`.
- - Initialize a `config.json` file within this newly created folder. This config file should follow how a study configuration is typically defined (see [StudyConfig](https://revisit.dev/docs/typedoc/interfaces/StudyConfig/)) for more details.
- - A typical practice is to include some introductory information before showcasing the full library. To achieve this, create an `introduction.md` file and place it in `public/libraries/my-plugin/assets/`.
-
-We are happy to **accept community contributions for libraries!** If you have a library that you think would be useful for others, please reach out to us and we will help you merge it into our repository.
-
-## Available Libraries
-
-Below is a list of libraries and descriptions we provide at the moment.
-
-Check out the [repository](https://github.com/revisit-studies/study/tree/main/public/libraries) for details.
-
-When using these plugins, please ensure that you properly cite the original sources in your work.
-
-:::note
-All references listed below follow the IEEE citation style.
-:::
-
-### Basic Checks
-
-- [`color-blindness`](../../libraries/color-blindness/): **The Ishihara Color Blindness Test**
-:::note[Reference]
-Images from [Ishihara Color Test](https://www.colour-blindness.com/colour-blindness-tests/ishihara-colour-test-plates/)
-:::
-
-- [`demographics`](../../libraries/demographics): **Collects participant demographic information**
-
-- [`mic-check`](../../libraries/mic-check): **Tests whether participants' microphone is working properly**
-
-- [`screen-recording`](../../libraries/screen-recording): **Records participants' screen**
-
-- [`virtual-chinrest`](../../libraries/virtual-chinrest): **Controls participants' viewing distance using a Virtual Chinrest**
-:::note[Reference]
-Q. Li, S. J. Joo, J. D. Yeatman, and K. Reinecke, "Controlling for participants' viewing distance in large-scale, psychophysical online experiments using a virtual chinrest," _Scientific Reports_, vol. 10, no. 1, pp. 1–11, 2020, doi: 10.1038/s41598-019-57204-1.
-:::
-
-### Questionnaires
-
-#### Usability and User Workload
-
-- [`nasa-tlx`](../../libraries/nasa-tlx): **NASA-TLX: The NASA Task Load Index (TLX) questionnaire for measuring perceived workload**
-:::note[Reference]
-S. G. Hart and L. E. Staveland, "Development of NASA-TLX (Task Load Index): Results of empirical and theoretical research," in _Advances in Psychology_, vol. 52, Amsterdam, The Netherlands: North-Holland, 1988, pp. 139–183, doi: 10.1016/S0166-4115(08)62386-9.
-:::
-
-- [`quis`](../../libraries/quis): **QUIS: The Questionnaire for User Interaction Satisfaction**
-:::note[Reference]
-J. P. Chin, V. A. Diehl, and K. L. Norman, "Development of an instrument measuring user satisfaction of the human-computer interface," in _Proceedings of the SIGCHI Conference on Human Factors in Computing Systems_, New York, NY, USA: Association for Computing Machinery, 1988, pp. 213–218, doi: 10.1145/57167.57203.
-:::
-
-:::note[Reference]
-J. P. Chin, K. L. Norman, and B. Shneiderman, "Subjective user evaluation of CF PASCAL programming tools," _Technical Report CAR-TR-304_, Human-Computer Interaction Laboratory, Center for Automation Research, University of Maryland, College Park, MD, USA, 1987.
-:::
-
-:::note[Reference]
-B. D. Harper and K. L. Norman, "Improving user satisfaction: The Questionnaire for User Interaction Satisfaction Version 5.5," in _Proceedings of the First Annual Mid-Atlantic Human Factors Conference_, Virginia Beach, VA, USA, 1993, pp. 224–228.
-:::
-
-- [`sam`](../../libraries/sam): **SAM: The Self-Assessment Manikin for measuring the affective reaction**
-:::note[Reference]
-M. M. Bradley and P. J. Lang, "Measuring emotion: The Self-Assessment Manikin and the semantic differential," _Journal of Behavior Therapy and Experimental Psychiatry_, vol. 25, no. 1, pp. 49–59, 1994, doi: 10.1016/0005-7916(94)90063-9.
-:::
-
-- [`smeq`](../../libraries/smeq): **SMEQ: The Subjective Mental Effort Questionnaire**
-:::note[Reference]
-F. R. H. Zijlstra and L. Van Doorn, "The construction of a scale to measure perceived effort," Delft University of Technology, Delft, The Netherlands, 1985.
-:::
-
-- [`sus`](../../libraries/sus): **SUS: The System Usability Scale**
-:::note[Reference]
-J. Brooke, "SUS: A 'quick and dirty' usability scale," in _Usability Evaluation in Industry_, P. W. Jordan et al., Eds. London, U.K.: Taylor & Francis, 1996, pp. 207–212, doi: 10.1201/9781498710411-35.
-:::
-
-- [`umux`](../../libraries/umux): **UMUX: The Usability Metric for User Experience**
-:::note[Reference]
-K. Finstad, "The usability metric for user experience," _Interacting with Computers_, vol. 22, no. 5, pp. 323–327, Sep. 2010, doi: 10.1016/j.intcom.2010.04.004.
-:::
-
-- [`umux-lite`](../../libraries/umux-lite): **UMUX-Lite: A shorter version of the Usability Metric for User Experience**
-:::note[Reference]
-J. R. Lewis, B. S. Utesch, and D. E. Maher, "UMUX-LITE: When there's no time for the SUS," in _Proceedings of the SIGCHI Conference on Human Factors in Computing Systems_, Paris, France, 2013, pp. 2099–2102, doi: 10.1145/2470654.2481287.
-:::
-
-#### Visual Literacy
-
-- [`adaptive-vlat`](../../libraries/adaptive-vlat): **A-VLAT: A short, adaptive visualization literacy test**
-:::note[Reference]
-Y. Cui, L. W. Ge, Y. Ding, F. Yang, L. Harrison, and M. Kay, "Adaptive assessment of visualization literacy," _IEEE Transactions on Visualization and Computer Graphics_, vol. 30, no. 1, pp. 628–637, Jan. 2024, doi: 10.1109/TVCG.2023.3327165.
-:::
-
-- [`berlin-num`](../../libraries/berlin-num): **The Berlin Numeracy Test**
-:::note[Reference]
-E. T. Cokely, M. Galesic, E. Schulz, S. Ghazal, and R. Garcia-Retamero, "Measuring risk literacy: The Berlin Numeracy Test," _Judgment and Decision Making_, vol. 7, no. 1, pp. 25–47, Jan. 2012, doi: 10.1017/S1930297500001819.
-:::
-
-- [`calvi`](../../libraries/calvi): **CALVI: The Critical Thinking Assessment for Literacy in Visualizations**
-:::note[Reference]
-L. W. Ge, Y. Cui, and M. Kay, "CALVI: Critical thinking assessment for literacy in visualizations," in _Proceedings of the 2023 CHI Conference on Human Factors in Computing Systems_, Hamburg, Germany, 2023, Art. no. 815, pp. 1–18, doi: 10.1145/3544548.3581406.
-:::
-
-- [`graph-literacy-scale`](../../libraries/graph-literacy-scale): **The Graph Literacy Scale**
-:::note[Reference]
-M. Galesic and R. Garcia-Retamero, "Graph literacy: A cross-cultural comparison," _Medical Decision Making_, vol. 31, no. 3, pp. 444–457, May–Jun. 2011, doi: 10.1177/0272989X10373805.
-:::
-
-- [`mini-vlat`](../../libraries/mini-vlat): **Mini-VLAT: A shorter version of VLAT designed for efficient assessment of visualization literacy**
-:::note[Reference]
-S. Pandey and A. Ottley, "Mini-VLAT: A short and effective measure of visualization literacy," _Computer Graphics Forum_, vol. 42, no. 3, pp. 1–11, Jun. 2023, doi: 10.1111/cgf.14809.
-:::
-
-- [`vlat`](../../libraries/vlat): **VLAT: The Visualization Literacy Assessment Test**
-:::note[Reference]
-S. Lee, S.-H. Kim, and B. C. Kwon, "VLAT: Development of a visualization literacy assessment test," _IEEE Transactions on Visualization and Computer Graphics_, vol. 23, no. 1, pp. 551–560, Jan. 2017, doi: 10.1109/TVCG.2016.2598920.
-:::
-
-#### Visualization Quality Metrics
-
-- [`beauvis`](../../libraries/beauvis): **BeauVis: A scale for assessing the aesthetic pleasure of visualizations**
-:::note[Reference]
-T. He, P. Isenberg, R. Dachselt, and T. Isenberg, "BeauVis: A validated scale for measuring the aesthetic pleasure of visual representations," _IEEE Transactions on Visualization and Computer Graphics_, pp. 1–11, 2022, doi: 10.1109/TVCG.2022.3209390.
-:::
-
-- [`previs`](../../libraries/previs): **PREVis: A questionnaire for evaluating the perceived readability of visualizations**
-:::note[Reference]
-A.-F. Cabouat, T. He, P. Isenberg, and T. Isenberg, "PREVis: Perceived readability evaluation for visualizations," _IEEE Transactions on Visualization and Computer Graphics_, vol. 31, no. 1, pp. 1083–1093, Jan. 2025, doi: 10.1109/TVCG.2024.3456318.
-:::
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/designing-studies/provenance-tracking.md b/versioned_docs/version-v2.4.1/designing-studies/provenance-tracking.md
deleted file mode 100644
index ceba3ccdd6..0000000000
--- a/versioned_docs/version-v2.4.1/designing-studies/provenance-tracking.md
+++ /dev/null
@@ -1,116 +0,0 @@
-# Provenance Tracking
-
-ReVISit has integrated provenance tracking with Trrack, a state-based provenance tracking library maintained by the same team that maintains reVISit. For more detailed information on Trrack and its API, visit the [Trrack documentation](https://apps.vdl.sci.utah.edu/trrack).
-
-## Integrating into a React and HTML component
-
-Building off the [Stroop color experiment](react-stimulus.md#example-2-stroop-color-experiment-with-reactive-response) from the React stimulus tutorial, we add provenance tracking to record each keystroke and enable replay.
-
-### 1. Define state and create Trrack with `useMemo`
-
-Because Trrack is state-based, you must define a state for your tracked application. For the Stroop text input:
-
-```ts title="src/public/demo-react-trrack/assets/DemoReactTrrack.tsx"
-interface StroopState {
- response: string;
-}
-```
-
-Create the Trrack registry, action, and instance **once** using `useMemo` (empty deps). This ensures the instance is stable across renders:
-
-```ts title="src/public/demo-react-trrack/assets/DemoReactTrrack.tsx"
-const { actions, trrack } = useMemo(() => {
- const reg = Registry.create();
- const setResponseAction = reg.register('setResponse', (state, nextResponse: string) => {
- state.response = nextResponse;
- return state;
- });
- const trrackInst = initializeTrrack({
- registry: reg,
- initialState: { response: '' },
- });
- return {
- actions: { setResponseAction },
- trrack: trrackInst,
- };
-}, []);
-```
-
-### 2. Call the action and pass `provenanceGraph` to `setAnswer`
-
-When the user types, call the Trrack action and include `provenanceGraph` in `setAnswer` so reVISit stores the provenance. Use a `useCallback` to keep the handler stable:
-
-```ts title="src/public/demo-react-trrack/assets/DemoReactTrrack.tsx"
-const updateAnswer = useCallback((value: string) => {
- setResponseText(value);
- trrack.apply('Set response', actions.setResponseAction(value));
- setAnswer({
- status: value.trim().length > 0,
- provenanceGraph: trrack.graph.backend,
- answers: { stroopAnswer: value },
- });
-}, [actions, setAnswer, trrack]);
-
-```
-
-### 3. Sync from `provenanceState` for replay
-
-During replay, reVISit passes `provenanceState` with the restored state. Sync it to your textbox so the input updates visibly when the user seeks through the timeline:
-
-```ts title="src/public/demo-react-trrack/assets/DemoReactTrrack.tsx"
- useEffect(() => {
- if (provenanceState) {
- setResponseText(provenanceState.response);
- }
- }, [provenanceState]);
-```
-
-### Full component example
-
-For the complete Stroop component with provenance tracking, see [DemoReactTrrack.tsx](https://github.com/revisit-studies/study/blob/main/src/public/demo-react-trrack/assets/DemoReactTrrack.tsx).
-
-For a basic HTML + D3 example, see our [Dots example](https://github.com/revisit-studies/study/blob/main/public/demo-html-trrack/assets/dots-count.html). Creating a Trrack instance and actions works the same as above, just without the React hooks.
-
-## Using Trrack for undo/redo
-
-The above example shows the basic use case for Trrack if you just want to store provenance and enable replay. With a little more effort, Trrack can also give your stimulus undo/redo and full study rehydration.
-
-For this, use Trrack as your central storage instead of React state. Where you would normally call `setState`, call the Trrack action instead:
-
-```ts
-trrack.apply('Set response', setResponseAction(value));
-```
-
-To update the frontend when the current node changes (e.g., when `undo` or `redo` are called), add an observer:
-
-```ts
-trrack.currentChange(() => {
- const response = trrack.getState().response;
- setResponseText(response);
-});
-```
-
-Add undo/redo via buttons or keybinds:
-
-```ts
-trrack.undo();
-trrack.redo();
-```
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/designing-studies/react-stimulus.md b/versioned_docs/version-v2.4.1/designing-studies/react-stimulus.md
deleted file mode 100644
index ddf159d618..0000000000
--- a/versioned_docs/version-v2.4.1/designing-studies/react-stimulus.md
+++ /dev/null
@@ -1,308 +0,0 @@
-# Designing a React Stimulus
-
-React is a popular JavaScript library for building user interfaces, primarily for single-page applications. You can find more details on the official [React documentation](https://react.dev/).
-
-Here we will introduce how to create a React stimulus for reVISit studies through two examples.
-
-**Example 1** is a stimulus from the [graphical perception experiment](https://doi.org/10.1080/01621459.1984.10478080). This example will demonstrate how to pass data from the config file to the stimulus.
-
-**Example 2** is a Stroop color experiment. This example will demonstrate how to retrieve user answers from the React component using the `reactive` response type.
-
-## Example 1: Graphical Perception Experiment
-
-The React component stimulus should be put into the `src/public/your-exp-name/assets` folder. As stated in other tutorials, we suggest always making an `assets` directory inside your experiment directory for the best organization possible. In our example, we name the experiment "example-cleveland," so we put this code into `src/public/example-cleveland/assets/BarChart.tsx`. Please replace it with another experiment name.
-
-We have a few reusable components and hooks available in the `src/public/example-cleveland/assets/hooks` and `src/public/example-cleveland/assets/chartcomponents` folders, which are required in this demo. These reusable components and hooks help creating charts using D3.js in React. You may copy them to your own experiment folder.
-
-Please note, there is a **"parameters"** prop in the BarChart component. This is used to pass data from the config file to the React component.
-In this example, we pass two data arrays to the BarChart component. One is the data array contains 5 objects, each object has a name and a value. The other is the selectedIndices array, which contains the indices of the data array that we want to highlight with dots.
-
-```ts title="src/public/example-cleveland/assets/chartcomponents/BarChart.tsx"
-import * as d3 from 'd3';
-import { useChartDimensions } from './hooks/useChartDimensions';
-import { Bars } from './chartcomponents/Bars';
-import { NumericAxisV } from './chartcomponents/NumericAxisV';
-import { OrdinalAxisHWithDotMarks } from './chartcomponents/OrdinalAxisHWithDotMarks';
-
-// Chart dimensions
-const chartSettings = {
- marginBottom: 40,
- marginLeft: 40,
- marginTop: 15,
- marginRight: 15,
- width: 400,
- height: 400,
-};
-
-// This React component renders a bar chart with 5 bars and 2 of them highlighted by dots.
-// The data value comes from the config file and pass to this component by parameters.
-function BarChart({ parameters }: { parameters: any }) {
- const tickLength = 6;
- const [ref, dms] = useChartDimensions(chartSettings);
-
- // Define axis scales
- // Data comes from parameters is used here
- const xScale = d3
- .scaleBand()
- .domain(parameters.data.map((d: { name: any }) => d.name))
- .range([0, dms.boundedWidth])
- .padding(0.2);
-
- const yScale = d3
- .scaleLinear()
- .domain([100, 0])
- .range([0, dms.boundedHeight]);
-
- // Define ticks
- const yAxisTickFilter = (ticks: any[]) => ticks.filter((t, i) => i === 0 || i === ticks.length - 1);
-
- // selectedIndices is used here to draw dots on the x-axis
- const xAxisTickFilter = (ticks: any[]) => ticks.filter((t, i) => parameters.selectedIndices.includes(i));
-
- return (
-
-
-
- );
-}
-
-export default BarChart;
-```
-
-In the config file, we will set parameters for the BarChart component.
-The parameters contain data and selectedIndices. Both are decoded in the above code and used to create the stimulus.
-
-The parameters are an object; you can change the format to suit your needs.
-
-```json title="public/example-cleveland/config.json"
-"barChart": {
- "meta": {
- "difficulty": 5,
- "chart": "Bar"
- },
- "description": "A chart with correct answer of 0.66",
- "instruction": "Two values are marked with dots. \n\nWhat percentage do you believe the smaller value represents relative to the larger value?",
- "type": "react-component",
- "path": "example-cleveland/assets/BarChart.tsx",
- "response": [
- {
- "id": "barChartAnswer",
- "prompt": "Your answer (1-100):",
- "required": true,
- "location": "belowStimulus",
- "type": "numerical",
- "min": 1,
- "max": 100
- }
- ],
- "parameters": {
- "data": [
- {
- "name": "A",
- "value": "30"
- },
- {
- "name": "B",
- "value": "40"
- },
- {
- "name": "C",
- "value": "50"
- },
- {
- "name": "D",
- "value": "40"
- },
- {
- "name": "E",
- "value": "60"
- }
- ],
- "selectedIndices": [
- 1,
- 4
- ]
- }
-}
-```
-
-
-
-## Example 2: Stroop Color Experiment (with `reactive` response)
-
-When building experiments with React, we can allow users to interact with a component to answer questions. In this example, we will build a Stroop color test using a React component and a reactive response type.
-In the Stroop color test, you are required to identify the color of the word, not what the word says. For example, for the word RED printed in blue ink, you should type 'BLUE.' The text content and text color are passed from the config file through `parameters`.
-
-The component uses:
-- `parameters` for trial-specific values (`displayText`, `textColor`, `taskid`)
-- `setAnswer` to send typed responses to reVISit
-- `reactive` response in config
-
-We will use `demo-react-trrack` as the experiment name. Create the React stimulus file in `src/public/demo-react-trrack/assets/`.
-
-```ts title="src/public/demo-react-trrack/assets/DemoReactTrrack.tsx"
-import { useCallback, useState } from 'react';
-import {
- Box, Center, Stack, Text, TextInput,
-} from '@mantine/core';
-import { StimulusParams } from '../../../store/types';
-
-/** Trial parameters from config: displayText and textColor */
-interface StroopTrialParams {
- displayText?: string;
- textColor?: string;
-}
-
-/** Normalize input to uppercase for consistent answers */
-const toCapped = (value: string) => value.toUpperCase();
-
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-function StroopColorTask({ parameters, setAnswer }: StimulusParams) {
- const { taskid } = parameters;
- const { displayText = '', textColor = 'black' } = parameters as StroopTrialParams;
-
- const [responseText, setResponseText] = useState('');
-
- // Update local state and pass to reVISit
- const updateAnswer = useCallback((value: string) => {
- setResponseText(value);
- setAnswer({
- status: value.trim().length > 0,
- answers: { [taskid]: value },
- });
- }, [setAnswer, taskid]);
-
- return (
-
- {/* Display the Stroop word in the configured color */}
-
-
-
- {displayText}
-
-
-
- {/* Text input for participant's color response */}
-
-
- );
-}
-
-export default StroopColorTask;
-```
-
-Below is a minimal config with two Stroop trials. Each trial passes `displayText` (the word shown) and `textColor` (the color of the text) via `parameters`. The `reactive` response type receives the typed answer from the component.
-
-```json title="public/demo-react-trrack/config.json"
-{
- "baseComponents": {
- "trial": {
- "description": "identify the text color in a Stroop trial",
- "instruction": "In this experiment you are required to say the color of the word, not what the word says. For example, for the word, RED, you should say \"Blue.\"",
- "type": "react-component",
- "path": "demo-react-trrack/assets/DemoReactTrrack.tsx",
- "nextButtonLocation": "sidebar",
- "response": [
- {
- "id": "stroopAnswer",
- "prompt": "Your typed Stroop color response",
- "location": "sidebar",
- "type": "reactive"
- }
- ]
- }
- },
- "components": {
- "trial-red-blue": {
- "baseComponent": "trial",
- "parameters": {
- "displayText": "RED",
- "textColor": "blue"
- }
- },
- "trial-green-pink": {
- "baseComponent": "trial",
- "parameters": {
- "displayText": "GREEN",
- "textColor": "pink"
- }
- }
- },
- "sequence": {
- "order": "fixed",
- "components": ["trial-red-blue", "trial-green-pink"]
- }
-}
-```
-
-### Adding provenance tracking
-
-To record user interactions and enable replay, you can add provenance tracking with Trrack. This involves:
-- Creating a Trrack registry and actions for state changes
-- Passing `provenanceGraph` in `setAnswer` so reVISit stores the provenance
-- Using `provenanceState` to restore the textbox during replay
-
-For a full walkthrough, see the [Provenance Tracking](provenance-tracking.md) tutorial.
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/designing-studies/record-screen.md b/versioned_docs/version-v2.4.1/designing-studies/record-screen.md
deleted file mode 100644
index 5e34891743..0000000000
--- a/versioned_docs/version-v2.4.1/designing-studies/record-screen.md
+++ /dev/null
@@ -1,132 +0,0 @@
-# Record Screen
-
-ReVISit provides built-in support for screen recording and playback, enabling both in-person and crowdsourced tracking studies.
-
-## Turning on screen recording
-
-You can enable screen recording in your study by setting the `recordScreen` flag, importing the [`screen-recording`](../libraries/screen-recording.md) library, and adding the `screenRecordingPermission` component to your study sequence.
-
-**Step 1: Enable screen recording in your study**
-
-*A. Enabling screen recording throughout the study*
-
-Set the `recordScreen` flag in the `uiConfig` section of your config file. You can optionally specify the FPS (frames per second) for screen recording.
-
-```json title="public/study-name/config.json"
-"uiConfig": {
- "recordScreen": true,
- "recordScreenFPS": 30
-}
-```
-
-This enables screen recording to your entire study. However, you can also disable screen recording on individual components.
-
-```json title="public/study-name/config.json"
-"barchart": {
- "recordScreen": false
-}
-```
-
-*B. Enabling screen recording on specific screens*
-
-If you want to enable screen recording on certain screens, you can leave `recordScreen` in the `uiConfig` as `false` and enable `recordScreen` at the component level. Settings in the component level overrides the global config.
-
-```json title="public/study-name/config.json"
-"barchart": {
- "recordScreen": true
-}
-```
-
-**Step 2: Import the screen recording library**
-
-Add `screen-recording` to the `importedLibraries` section of your config. This makes the `screenRecordingPermission` component available, which is required to request user permission for screen capture.
-
-```json title="public/study-name/config.json"
-"importedLibraries": [
- "screen-recording"
-],
-```
-
-**Step 3: Add the screen recording permission page to your sequence**
-
-Insert the `screenRecordingPermission` page into your study sequence (ideally after your introduction and consent components). Any screens that follow it will be able to record the participant’s screen.
-
-```json title="public/study-name/config.json"
-"sequence": {
- "order": "fixed",
- "components": ["introduction", "$screen-recording.components.screenRecordingPermission", "external_website", "barChart"]
-}
-```
-
-## Screen recording per stimulus
-
-By default, the screen is recorded for all tasks that follow the `screenRecordingPermission` page. However, we recommend only recording tasks you plan to analyze, and disabling recording for components such as consent forms or introductions.
-
-To disable recording for a component, set its `recordScreen` flag to `false`:
-
-```json title="public/example-brush-interactions/config.json"
-"introduction": {
- "type": "markdown",
- "path": "example-brush-interactions/assets/introduction.md",
- "recordScreen": false,
- "response": [
- {
- "id": "prolificId",
- "prompt": "Please enter your Prolific ID",
- "location": "belowStimulus",
- "type": "shortText",
- "placeholder": "Prolific ID",
- "paramCapture": "PROLIFIC_PID"
- }
- ]
-}
-```
-
-## Screen recording permissions
-
-Screen is recorded via browser, and participants will receive a permissions request from their browser to allow screen capture. If they do not grant permissions, they will be automatically stopped from continuing the study. This is done through the `screen-recording` library. You can find more information in the [reVISit libraries](./plugin-libraries.md).
-
-Participants are asked to share the study tab. In Chromium-based browsers, the study tab is usually pre-selected by default. In other browsers, participants must manually select the correct tab, which is labeled _"RECORD THIS TAB."_
-
-All recorded videos are stored in Firebase storage.
-
-## Downloading screen recording videos
-
-You can [download screen recording videos](../analysis/data-export.md#download-screen-recording) from the analysis page of the study.
-
-Alternatively, you can use `gsutil` to download screen recorded videos. We recommend utilizing `gsutil` to download the video files in bulk. Navigate to your Firebase storage to find your appspot name, then run the command:
-
-```bash
-gsutil -m cp -r gs://my-bucket/studyName/screenRecording
-```
-
-## Screen recording with Think Aloud (audio recording)
-
-ReVISit also supports [Think Aloud](../think-aloud) protocols alongside screen recording. To enable this, set `recordAudio` in the `uiConfig`:
-
-```json title="public/study-name/config.json"
-"uiConfig": {
- "recordScreen": true,
- "recordAudio": true
-}
-```
-
-When both screen and audio recording are enabled, the permissions page will include a microphone check.
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/designing-studies/sequences/dynamic-blocks.md b/versioned_docs/version-v2.4.1/designing-studies/sequences/dynamic-blocks.md
deleted file mode 100644
index 31918003e3..0000000000
--- a/versioned_docs/version-v2.4.1/designing-studies/sequences/dynamic-blocks.md
+++ /dev/null
@@ -1,102 +0,0 @@
-# Dynamic Blocks
-
-Some studies require knowledge of the participant's responses to previous questions to determine the next component that is shown. For example, if a participant answers a question incorrectly, they may be shown a simpler task next. Alternatively, if a participant answers a question correctly, they may be shown a more difficult task next. This is a common feature in adaptive testing, where the difficulty of the questions adapts to the participant's performance.
-
-## Overview
-
-In reVISit, this can be achieved using dynamic blocks. Dynamic blocks are blocks that use a function to calculate what the next component will be. See the [DynamicBlock](../../../typedoc/interfaces/DynamicBlock/) for the complete interface definition.
-
-The dynamic block function is a TypeScript/JavaScript function that is defined in the `src/public/study-name/` folder and is referenced in the study configuration file like so:
-
-```json title="public/study-name/config.json"
-"sequence": {
- "order": "fixed",
- "components": [
- "introduction",
- {
- "id": "dynamicBlock",
- "order": "dynamic",
- "functionPath": "study-name/dynamic.ts",
- "parameters": {
- "param1": "value1",
- "param2": "value2"
- }
- },
- "post-study-survey"
- ]
-}
-```
-
-In this example, the `dynamicBlock` component is a dynamic block that uses the function defined in `src/public/study-name/dynamic.ts` to determine the next component. The `parameters` field is used to pass any parameters to the function.
-
-The function in `src/public/study-name/dynamic.ts` uses the following types provided by reVISit:
-
-```ts title="src/public/study-name/dynamic.ts"
-export default function dynamicFunction({ answers, customParameters, currentStep, currentBlock } : JumpFunctionParameters): JumpFunctionReturnVal
-```
-
-Where `JumpFunctionParameters` is defined as:
-
-```ts title="src/store/types.ts"
-export interface JumpFunctionParameters {
- answers: ParticipantData['answers'],
- customParameters: T,
- currentStep: number,
- currentBlock: string,
-}
-```
-
-And `JumpFunctionReturnVal` is defined as:
-
-```ts title="src/store/types.ts"
-export interface JumpFunctionReturnVal {
- component: string | null,
- parameters?: Record,
- correctAnswer?: Answer[],
-}
-```
-
-The `answers` field is an object that contains the participant's answers to all the questions so far. The `customParameters` field is an object that contains any parameters passed to the function from the study configuration file. The `currentStep` field is the current step index in the flattened sequence, and `currentBlock` is the id/path prefix for the active dynamic block.
-
-The function should return an object with the following fields:
-
-- `component`: The id of the next component to show. If this is `null`, the study will exit the dynamic block and continue with the next component in the sequence.
-- `parameters` (optional): Any parameters to pass to the next component. This is useful for passing information from the dynamic block to the next component to control how the next component renders.
-- `correctAnswer` (optional): An array of correct answers to the questions that have been asked so far. This is used to calculate the participant's score at the end of the study.
-
-It is required that the function you provide is deterministic, and has no randomness. This is because the function will be run multiple times during the study, and the same inputs should always produce the same outputs.
-
-Here is an example of a dynamic function that shows a different component based on the participant's answers:
-
-```ts title="src/public/test-step-logic/func.ts"
-import { JumpFunctionParameters, JumpFunctionReturnVal } from '../../store/types';
-
-export default function func({ answers } : JumpFunctionParameters<{name: string}>) : JumpFunctionReturnVal {
- const topAnswerLength = Object.entries(answers)
- .filter(([_, value]) => value.endTime > -1)
- .length;
-
- if (topAnswerLength === 5) {
- return { component: null };
- }
-
- return { component: 'reactComponent', parameters: { n: topAnswerLength || 0 } };
-}
-```
-
-In this example, the function checks how many questions the participant has answered so far. If the participant has answered 5 questions, the function returns `null`, which exits the dynamic block. Otherwise, the function returns the id of the next component to show, along with any parameters to pass to the component. In this case, the `reactComponent` component is shown, and the parameter `n` is passed to the component with the value of the number of questions the participant has answered so far.
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/designing-studies/sequences/img/condition-study-card.png b/versioned_docs/version-v2.4.1/designing-studies/sequences/img/condition-study-card.png
deleted file mode 100644
index 991acf1b21..0000000000
Binary files a/versioned_docs/version-v2.4.1/designing-studies/sequences/img/condition-study-card.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/designing-studies/sequences/study-sequences.md b/versioned_docs/version-v2.4.1/designing-studies/sequences/study-sequences.md
deleted file mode 100644
index 14f9fec722..0000000000
--- a/versioned_docs/version-v2.4.1/designing-studies/sequences/study-sequences.md
+++ /dev/null
@@ -1,373 +0,0 @@
-# Study Sequence
-
-Once you have defined the components you want to be part of your study, you need to tell reVISit what order to show the components in. This is done by defining a sequence object in the reVISit Spec, which has a variety of powerful options for different randomization types, as well as attention checks, breaks, and advanced skip logic for more complex studies.
-
-ReVISit also always injects a special `end` component at the very end of the study, at which point the data is uploaded and the participant is instructed that they can safely close the window. Other blocks can also optionally be given `id`, which can then be used to jump to them.
-
-## Simple Sequence
-
-If your study has a set order, creating a sequence is simple. Define the components in the order you want to see them, and set your order to `fixed`.
-
-```json title="public/study-name/config.json"
-"sequence": {
- "order": "fixed",
- "components": [
- "introduction",
- "consent",
- "trial1",
- "trial2",
- "post-survey"
- ]
-}
-```
-
-## Nested Sequence
-
-Many studies need to randomize the order of some of the components, but not all. You may want every participant to see `introduction` and `consent` first, but then randomize the order they see trials in. To do this, sequences can be nested. Create another object around your trials, and change the order to `random`.
-
-```json title="public/study-name/config.json"
- "sequence": {
- "order": "fixed",
- "components": [
- "introduction",
- "consent",
- {
- "order": "random",
- "components": [
- "trial1",
- "trial2"
- ]
- },
- "post-survey"
- ]
- }
-```
-
-In this case all participants will first see `introduction` and `consent`, and then randomly either `trial1` or `trial2` first, and then the other trial second, followed by the `post-survey` for everyone.
-
-Studies can be nested to arbitrary depths. A frequent use case is a within subjects study where you want to randomize the order a participant sees two conditions in, and then also randomize the order of the trials within each condition. That would look like the following.
-
-```json title="public/study-name/config.json"
-"sequence": {
- "order": "fixed",
- "components": [
- "introduction",
- "consent",
- {
- "order": "random",
- "components": [
- {
- "order": "random",
- "components": [
- "ConditionA-1",
- "ConditionA-2"
- ]
- },
- {
- "order": "random",
- "components": [
- "ConditionB-1",
- "ConditionB-2"
- ]
- },
- ]
- },
- "post-survey"
- ]
-}
-```
-
-## Latin Square
-
-Studies frequently want portions of their trials to be random, but also want to ensure that their trials are not susceptible to ordering effects due to bad luck in the randomization process. A [latin square study design](https://en.wikipedia.org/wiki/Latin_square) is commonly used to combat this, and we have latin squares as a built-in option for randomization. Just change the order to `latinSquare`.
-
-```json title="public/study-name/config.json"
-"sequence": {
- "order": "fixed",
- "components": [
- "introduction",
- "consent",
- {
- "order": "latinSquare",
- "components": [
- "trial1",
- "trial2"
- ]
- },
- "post-survey"
- ]
-}
-```
-
-This option will create a latin square for any block using one behind the scenes, iterate through the latin square as new participants request sequences, and refill it when empty.
-
-:::warning
-The latin square theoretically ensures proper balance between conditions, however the balance is only guaranteed if all participants complete the study, which is frequently not the case in online studies. If a participant doesn't complete the study and should be discarded, that "draw" from the latin square is used up, which could lead to inconsistencies (e.g., if more participants don't complete one condition of the study more often than others). You can counter that effect by `rejecting` participants via the [data dashboard](../../../analysis/study-summary/). When a participant is rejected, their data gets flagged (but not deleted), and the sequence they had is returned to the sequence pool. This ensures that participants that start a study but do not complete it or are stopped before completing it (failed attention check, refused consent form, etc.) do not use up a row of any generated latin squares.
-
-In practice, it is useful to recruit participants in batches and reject incomplete participants before starting a new batch, to ensure that the latin square remains balanced.
-
-For other ways to ensure balance in your study design, please review this [FAQ item](../../../faq/#q-how-can-i-ensure-balanced-numbers-of-participants-between-conditions-in-my-study-design) and consider using [URL-based conditions](../url-conditions/).
-:::
-
-## Showing a Subset of All Trials
-
-Studies frequently want to only show a subset of all trials to a single participant. For this, each block in the sequence has a `numSamples` variable. The following example will show each participant 2 of the 4 trials. `numSamples` works with all sequence orders, but is likely only useful in combination with `random` and `latinSquare`. If used with `latinSquare`, choosing a `numSamples` will ensure that each trial is seen the same amount.
-
-```json title="public/study-name/config.json"
-"sequence": {
- "order": "fixed",
- "components": [
- "introduction",
- "consent",
- {
- "order": "latinSquare",
- "numSamples": 2,
- "components": [
- "trial1",
- "trial2",
- "trial3",
- "trial4"
- ]
- },
- "post-survey"
- ]
-}
-```
-
-## Attention Checks and Breaks
-
-To add attention checks or breaks to your study, there is an `interruptions` object, which has its own components. The example below adds two attention checks randomly spaced out between trials 1-4. You are guaranteed that the first component will not be an attention check, and that you won't see two attention checks back to back.
-
-```json title="public/study-name/config.json"
-"sequence": {
- "order": "fixed",
- "components": [
- "introduction",
- "consent",
- {
- "order": "latinSquare",
- "components": [
- "trial1",
- "trial2",
- "trial3",
- "trial4"
- ],
- "interruptions": [
- {
- "spacing": "random",
- "numInterruptions": 2,
- "components": ["myAttentionCheckComponent"]
- }
- ]
- },
- "post-survey"
- ]
-}
-```
-
-You can also add `interruptions` deterministically at set intervals. The example below will put an attention check after the first and third trial.
-
-```json title="public/study-name/config.json"
-"sequence": {
- "order": "fixed",
- "components": [
- "introduction",
- "consent",
- {
- "order": "latinSquare",
- "components": [
- "trial1",
- "trial2",
- "trial3",
- "trial4"
- ],
- "interruptions": [
- {
- "spacing": 2,
- "firstLocation": 1,
- "components": ["myAttentionCheckComponent"]
- }
- ]
- },
- "post-survey"
- ]
-}
-```
-
-## Skip Logic
-
-Some studies need more advanced sequencing logic, based on a participant's response to previous questions. For example, a participant should only be shown a second, simpler task if they got a first, difficult task wrong. This is possible to implement in reVISit sequences with the `skip` object.
-
-The example below will jump straight to `end` if the consent form is answered with anything but `yes` to the field `consentApproval`, meaning the participant did not approve of the consent form. All skip conditions require labeling any components that you want to jump to with your own id, except for the keyword `end`, which always jumps to the default final component of the study.
-
-```json title="public/study-name/config.json"
-"sequence": {
- "order": "fixed",
- "components": [
- "introduction",
- {
- "order": "fixed",
- "components": ["consent"],
- "skip": [
- {
- "name": "consent",
- "check": "response",
- "responseId": "consentApproval",
- "value": "yes",
- "to": "end"
- }
- ]
- },
- "trial1",
- "trial2",
- "trial3",
- "trial4",
- "post-survey"
- ]
-}
-```
-
-To check if multiple components are correct, for example that all attention checks were correct, you can do the following:
-
-```json title="public/study-name/config.json"
-"sequence": {
- "order": "fixed",
- "components": [
- "introduction",
- "consent",
- {
- "order": "latinSquare",
- "components": [
- "trial1",
- "trial2",
- "trial3",
- "trial4"
- ],
- "interruptions": [
- {
- "spacing": 2,
- "firstLocation": 1,
- "components": ["myAttentionCheckComponent"]
- }
- ],
- "skip": [
- {
- "name": "myAttentionCheckComponent",
- "check": "responses",
- "to": "end"
- }
- ]
- },
- "post-survey"
- ]
-}
-```
-This example will go through every component named `myAttentionCheckComponent`, and if any response is incorrect, jump immediately to end.
-
-You can also wait until multiple attention checks have been answered incorrectly to jump to end with the `repeatedComponent` check.
-
-```json title="public/study-name/config.json"
-"sequence": {
- "order": "fixed",
- "components": [
- "introduction",
- "consent",
- {
- "order": "latinSquare",
- "components": [
- "trial1",
- "trial2",
- "trial3",
- "trial4"
- ],
- "interruptions": [
- {
- "spacing": 2,
- "firstLocation": 1,
- "components": ["myAttentionCheckComponent"]
- }
- ],
- "skip": [
- {
- "name": "myAttentionCheckComponent",
- "check": "repeatedComponent",
- "condition": "numIncorrect",
- "value": 2,
- "to": "end"
- }
- ]
- },
- "post-survey"
- ]
-}
-```
-
-You can also use `skip` to jump around within your study. The example below skips the block `hardQuestions` if the participant gets both questions wrong in `easyQuestions`.
-
-```json title="public/study-name/config.json"
-"sequence": {
- "order": "fixed",
- "components": [
- "introduction",
- "consent",
- {
- "id": "easyQuestions",
- "order": "latinSquare",
- "components": [
- "trial1",
- "trial2"
- ],
- "skip": [
- {
- "check": "block",
- "condition": "numIncorrect",
- "value": 2,
- "to": "moreEasyQuestions"
- }
- ]
- },
- {
- "id": "hardQuestions",
- "order": "latinSquare",
- "components": [
- "trial3",
- "trial4"
- ]
- },
- {
- "id": "moreEasyQuestions",
- "order": "latinSquare",
- "components": [
- "trial5",
- "trial6"
- ]
- },
- "post-survey"
- ]
-}
-```
-
-After jumping to `moreEasyQuestions`, the sequence will continue as if you had gotten there naturally, so will continue on to `post-survey` afterwards.
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/designing-studies/sequences/url-conditions.md b/versioned_docs/version-v2.4.1/designing-studies/sequences/url-conditions.md
deleted file mode 100644
index 4009101341..0000000000
--- a/versioned_docs/version-v2.4.1/designing-studies/sequences/url-conditions.md
+++ /dev/null
@@ -1,86 +0,0 @@
-# Conditions based on URL Parameters
-
-You can choose to assign participants to specific study conditions via URL parameters. This is useful to manually balance between subject designs and results in clean condition-level analysis.
-
-To pass conditions, use the `condition` query parameter, for example `/path/to/study?condition=color`. When the study starts, reVISit reads the URL and only runs conditional blocks whose `id` matches one of the values. Non-conditional blocks still run as usual for every participant.
-
-:::info
-Conditions will be available as a column in your data automatically.
-:::
-
-To define conditional blocks, use `"conditional": true` on a block in `sequence`, and give that block an `id`. The `id` is the condition name used in the URL.
-
-```json title="public/demo-condition/config.json"
-{
- "sequence": {
- "order": "fixed",
- "components": [
- "introduction",
- {
- "id": "color",
- "conditional": true,
- "components": ["color-trial-1", "color-trial-2"],
- "order": "random"
- },
- {
- "id": "shape",
- "conditional": true,
- "components": ["shape-trial-1", "shape-trial-2"],
- "order": "fixed"
- }
- ]
- }
-}
-```
-
-With this setup, `/path/to/study?condition=color` includes the `color` block and skips `shape`.
-**You can also pass multiple conditions like `/path/to/study?condition=color,shape`.** The `introduction` component is shown to all participants regardless of condition.
-
-:::warning
-We strongly recommend using conditions only at the top levels of your sequence and not nesting conditional blocks inside other conditional blocks, as this can lead to unexpected behavior.
-
-If you'd like to combine multiple conditions, like in the following example:
-
-- rectangle
- - dark
- - light
-- circle
- - dark
- - light
-
-We recommend flattening the conditions into components, like this:
-
-- rectangle-dark
-- rectangle-light
-- circle-dark
-- circle-light
-
-:::
-
-### Choosing a Condition from the Study Card
-
-The landing page study card lets you pick one or more conditions and copy a link with those values set.
-
-
-
-The condition picker lists the available conditions and the current participant counts. Select a condition and click "Go to Study".
-
-:::info
-After the initial assignment that happens when you visit a URL with a condition, changing conditions is not possible, even in dev mode, except by starting as a new participant with the "Next Participant" button.
-:::
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/designing-studies/think-aloud.md b/versioned_docs/version-v2.4.1/designing-studies/think-aloud.md
deleted file mode 100644
index 13ce019fa8..0000000000
--- a/versioned_docs/version-v2.4.1/designing-studies/think-aloud.md
+++ /dev/null
@@ -1,76 +0,0 @@
-# Think Aloud
-
-ReVISit has integrated audio recording and audio playback for conducting in-person or crowdsourced think-aloud studies. Audio is only recorded while using Firebase or Supabase storage, and will not activate if using local storage.
-
-## Turning on audio recording
-
-Turning on audio recording for your entire study can be done by setting the `recordAudio` flag in the `uiConfig` section of your config file.
-
-```json title="public/study-name/config.json"
-"uiConfig": {
- "recordAudio": true
-}
-```
-
-By default, this will record audio for every task in the study. However, we recommend only recording audio for tasks which you plan on later analyzing, and turning it off for tasks such as consent forms and introductions. Each component can turn off audio for that component by setting the `recordAudio` flag within the component to false, as shown below.
-
-```json title="public/example-brush-interactions/config.json"
-"introduction": {
- "type": "markdown",
- "path": "example-brush-interactions/assets/introduction.md",
- "recordAudio": false,
- "response": [
- {
- "id": "prolificId",
- "prompt": "Please enter your Prolific ID",
- "location": "belowStimulus",
- "type": "shortText",
- "placeholder": "Prolific ID",
- "paramCapture": "PROLIFIC_PID"
- }
- ]
-},
-```
-
-Audio is recorded via browser, and participants will receive a permissions request from their browser to access their microphone. If they do not have a microphone or failed to grant permissions, they will not be automatically stopped from continuing the study. However, for this purpose we provide the [`mic-check`](../libraries/mic-check.md) library, which requires participants to have a functioning microphone to continue the study. You can find more information in the [reVISit libraries](./plugin-libraries.md).
-
-:::info
-If you are using Firebase and want automatic transcripts for Think Aloud studies, you must also install the [Google Cloud Speech-to-Text extension](https://extensions.dev/extensions/googlecloud/speech-to-text) in your Firebase project. Once configured, it will automatically transcribe uploaded audio files.
-:::
-
-## Click-to-record
-
-The `clickToRecord` option enables a click-and-hold microphone button instead of continuous recording. When enabled, audio is muted by default and is recorded only while the button is held. When disabled, recording starts immediately and can be paused or resumed via the microphone button. You can set `"clickToRecord": true` in `uiConfig` for the whole study or at the individual component level.
-
-
-
-## Downloading audio
-
-All audio data is stored in Firebase or Supabase storage. To listen to participants' audio after they have completed a study, navigate to the [Participant Replay](../analysis/participant-replay.md) view in analysis.
-
-To download audio data after completing a study, navigate to [Participant View](../analysis/data-export.md) in analysis.
-
-:::info
-To download the audio and transcript files in bulk from Firebase, navigate to your Firebase storage to find your appspot name, then run the command `gsutil -m cp -r gs://my-bucket/studyName/audio`.
-
-Transcript files are generated only if you have installed the [Google Cloud Speech-to-Text extension](https://extensions.dev/extensions/googlecloud/speech-to-text) in Firebase.
-:::
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/designing-studies/vega-stimulus.md b/versioned_docs/version-v2.4.1/designing-studies/vega-stimulus.md
deleted file mode 100644
index 4e935edc4f..0000000000
--- a/versioned_docs/version-v2.4.1/designing-studies/vega-stimulus.md
+++ /dev/null
@@ -1,354 +0,0 @@
-# Designing a Vega Stimulus
-
-[Vega](https://vega.github.io/vega/) and [Vega-Lite](https://vega.github.io/vega-lite/) are popular visualization grammars for creating data visualizations.
-Vega allows you to define the visual appearance and interactive behavior of a visualization in JSON format and generate web-based views using Canvas or SVG.
-
-A key benefit of using Vega with reVISit is that **you get provenance tracking (interaction logs) and the detailed replay of every single participant's interactions for free!**
-
-This guide demonstrates how to integrate a Vega-based component into reVISit.
-
-You can check out the [live demo](https://revisit.dev/study/demo-vega/) and the [code for these examples](https://github.com/revisit-studies/study/tree/main/public/demo-vega).
-
-Also review the relevant reference for
-* [Vega Components](https://revisit.dev/docs/typedoc/interfaces/VegaComponentConfig/)
-* [Vega Paths](https://revisit.dev/docs/typedoc/interfaces/VegaComponentPath/)
-
-There are two ways to add a Vega component: directly in the config, and in an external file.
-
-### 1. Adding Vega Specs Directly to the reVISit Config
-
-To include Vega specifications directly in the reVISit configuration, set the `type` field of your component to `vega` and add your Vega specifications within the `config` field, as shown below:
-
-```json title="public/demo-vega/config.json"
-"components": {
- "vegademo1": {
- "type": "vega",
- "config": {... your vega config...}
- ...
- }
-}
-```
-
-### 2. Linking to Vega Specs in the reVISit Config
-
-Including Vega specifications directly in the configuration may make your config file long and also mixes two languages. To address this, you can also manage the specifications in a separate file and link to it.
-
-In this case, the `type` remains `vega`, but instead of using the _config_ field, you use the `path` field to specify the location of the Vega specifications file.
-
-```json title="public/demo-vega/config.json"
-"components": {
- "vegademo2": {
- "type": "vega",
- "path": "demo-vega/specs/vegademo2.specs.json",
- ...
- }
-}
-```
-
-## User Interactions and Data Passing
-
-One of the key reasons for using Vega for user studies is its ability to create interactive visualizations. For example, you can design stimuli that allow participants to interact with the visualization and capture their responses with little effort compared to using HTML or React stimuli. These responses can then be sent directly to reVISit for further processing.
-
-To achieve this, you can use [Vega signals](https://vega.github.io/vega/docs/signals/).
-Specifically, a signal with the reserved name `revisitAnswer` is used to pass participant responses to reVISit.
-Here's an example of how to define the `revisitAnswer` signal:
-
-```json title="public/demo-vega/config.json"
-{
- "name": "revisitAnswer",
- "value": {},
- "on": [
- {
- "events": "rect:click",
- "update": "{responseId: 'vegaDemoResponse1', response: datum.category}"
- }
- ]
-}
-```
-
-In this example:
-
-- The `events` field specifies the user interaction to listen for (`rect:click` in this instance).
-- The `update` field defines the response structure, which includes a `responseId` and the participant's selection (e.g., `datum.category`). The `responseId` should match the id in your response field described below.
-
-:::info
-Ensure that you are using Vega when adding signals. If you are using Vega-Lite, you can convert your specifications to lower-level Vega specifications to add signals.
-:::
-
-### Capturing Responses
-Once the signal is defined in your Vega specifications, you can configure the response field in the reVISit configuration. By setting the response type to `reactive`, the signal emitted by the Vega component is captured and sent to the reVISit platform.
-
-```json title="public/demo-vega/config.json"
-"response": [
- {
- "id": "vegaDemoResponse1",
- "prompt": "You selected:",
- "location": "sidebar",
- "type": "reactive"
- }
-]
-```
-
-This setup ensures that the participant's interaction with the visualization is seamlessly recorded and displayed in the reVISit interface.
-
-:::info
-Make sure that the `response.id` matches the one in vega signal's `responseId`.
-:::
-
-## Example Config with Complete Vega Specifications
-
-Below is an example (partial – the component part) configuration for a study with a bar chart including a complete Vega specification.
-In this setup, participants are asked to select the highest bar.
-When a bar is clicked, the response is sent to reVISit and rendered in the sidebar.
-An additional prompt is added to assess how confident participants are in their answers.
-The figure shows the result:
-
-
-
-Remember that all events in this example are fully tracked, so you can inspect the interactions of each participants in the [replay view](https://revisit.dev/study/analysis/stats/demo-vega/table).
-
-
-```json title="public/demo-vega/config.json"
-"components": {
- "vegademo1": {
- "meta": {
- "metadata": 1
- },
- "description": "Select the highest bar.",
- "instruction": "Click on the bar with the highest value.",
- "type": "vega",
- "config": {
- "$schema": "https://vega.github.io/schema/vega/v5.json",
- "width": 400,
- "height": 200,
- "padding": {
- "left": 5,
- "right": 5,
- "top": 5,
- "bottom": 5
- },
- "data": [
- {
- "name": "table",
- "values": [
- {
- "category": "A",
- "amount": 28
- },
- {
- "category": "B",
- "amount": 55
- },
- {
- "category": "C",
- "amount": 43
- },
- {
- "category": "D",
- "amount": 91
- },
- {
- "category": "E",
- "amount": 81
- },
- {
- "category": "F",
- "amount": 53
- },
- {
- "category": "G",
- "amount": 19
- },
- {
- "category": "H",
- "amount": 87
- }
- ]
- }
- ],
- "config": {
- "signals": [
- {
- "name": "tooltip",
- "value": {},
- "on": [
- {
- "events": "rect:mouseover",
- "update": "datum"
- },
- {
- "events": "rect:mouseout",
- "update": "{}"
- }
- ]
- },
- {
- "name": "revisitAnswer",
- "value": {},
- "on": [
- {
- "events": "rect:click",
- "update": "{responseId: 'vegaDemoResponse1', response: datum.category}"
- }
- ]
- }
- ]
- },
- "scales": [
- {
- "name": "xscale",
- "type": "band",
- "domain": {
- "data": "table",
- "field": "category"
- },
- "range": "width"
- },
- {
- "name": "yscale",
- "domain": {
- "data": "table",
- "field": "amount"
- },
- "nice": true,
- "range": "height"
- }
- ],
- "axes": [
- {
- "orient": "bottom",
- "scale": "xscale"
- },
- {
- "orient": "left",
- "scale": "yscale"
- }
- ],
- "marks": [
- {
- "type": "rect",
- "from": {
- "data": "table"
- },
- "encode": {
- "enter": {
- "x": {
- "scale": "xscale",
- "field": "category",
- "offset": 1
- },
- "width": {
- "scale": "xscale",
- "band": 1,
- "offset": -1
- },
- "y": {
- "scale": "yscale",
- "field": "amount"
- },
- "y2": {
- "scale": "yscale",
- "value": 0
- }
- },
- "update": {
- "fill": [
- {
- "test": "datum.category === tooltip.category",
- "value": "red"
- },
- {
- "value": "steelblue"
- }
- ]
- }
- }
- },
- {
- "type": "text",
- "encode": {
- "enter": {
- "align": {
- "value": "center"
- },
- "baseline": {
- "value": "bottom"
- },
- "fill": {
- "value": "#333"
- }
- },
- "update": {
- "x": {
- "scale": "xscale",
- "signal": "tooltip.category",
- "band": 0.5
- },
- "y": {
- "scale": "yscale",
- "signal": "tooltip.amount",
- "offset": -2
- },
- "text": {
- "signal": "tooltip.category"
- },
- "fillOpacity": [
- {
- "test": "datum.category === tooltip.category",
- "value": 0
- },
- {
- "value": 1
- }
- ]
- }
- }
- }
- ]
- },
- "nextButtonLocation": "sidebar",
- "response": [
- {
- "id": "vegaDemoResponse1",
- "prompt": "You selected:",
- "location": "sidebar",
- "type": "reactive"
- },
- {
- "id": "vegaDemoConfidence1",
- "prompt": "How confident are you with your answer?",
- "location": "sidebar",
- "type": "slider",
- "options": [
- {
- "label": "Low",
- "value": 0
- },
- {
- "label": "High",
- "value": 100
- }
- ]
- }
- ]
- }
-}
-```
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/faq.md b/versioned_docs/version-v2.4.1/faq.md
deleted file mode 100644
index 7c6b252b3c..0000000000
--- a/versioned_docs/version-v2.4.1/faq.md
+++ /dev/null
@@ -1,81 +0,0 @@
-# FAQ
-
-Below is a list of frequently asked questions.
-
-If you have a question that is not answered by this page or the rest of the [documentation](../introduction/), you can join the [reVISit Slack group](https://join.slack.com/t/revisit-nsf/shared_invite/zt-2g1lwcq5y-Yae8eBEbMO~r7tP~ZQ7Cig). Otherwise, you can contact us at [contact@revisit.dev](mailto:contact@revisit.dev).
-
-### Q: Something weird is happening while I debug my study. What should I do?
-
-A: If you're debugging your study by re-taking parts of the study over and over, you might get into an awkward state with the data that's stored. This doesn't happen when participants take the study, because they'll only take it once. You can click "Next Participant" in the study browser, and/or clear your browser cache and local storage to resolve this issue.
-
-### Q: Should I use JSON or YAML for my reVISit study configuration?
-
-A: Both JSON and YAML are fully supported for reVISit study configurations. JSON is recommended for most users, especially beginners, because it provides full schema validation support in IDEs like VSCode, giving you autocomplete and error detection.
-
-YAML is a good alternative if you prefer cleaner, more readable syntax and want to add comments to your configuration. However, YAML doesn't support the same level of IDE schema validation.
-
-### Q: Is there a version of this application that I do not need to host myself?
-
-A: ReVISit is designed so that the study creators have full control over the data collected from their study. While the reVISit team (currently) offers no hosting platform, we designed the reVISit repository to make hosting the application yourself as simple as possible using GitHub Pages and Firebase or Supabase. Using these tools requires no domain name setup, no external server to host the application (unless self hosting Supabase), and no backend database to store your data; all of this can be achieved by using Firebase/Supabase and GitHub pages. Please see [Firebase Setup](../data-and-deployment/firebase/setup/) or [Supabase Setup](../data-and-deployment/supabase/setup/). See [here](../data-and-deployment/deploying-to-static-website) for deploying to GitHub pages.
-
-However, we are considering making hosting available in a future version to further simplify the process of creating your own study. Let us know if that would be important to you!
-
-### Q: I need a specific type of form element that's not in the library, what can I do?
-
-A: There are a few ways you could handle that:
-
-- You could add a form element as part of the core reVISit code. If you do so, consider submitting a PR that we can integrate back into reVISit.
-- You could write a custom web page or React component that does exactly what you want. In that case be mindful that you will also have to handle data storage and provenance tracking yourself, which are "free" if you use a standard reVISit form element.
-
-### Q: I already have a website where I'd like to host reVISit. How can I use reVISit in an already existing website?
-
-A: ReVISit is designed to be a single page web application. If you run `yarn build` inside your forked repository, the bundler will generate a `dist` directory containing all the necessary code for a static deployment. In this directory is the `index.html` file which is the entry point for the application — no additional setup is necessary. For example, if you are using [AWS S3 static website hosting](https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteHosting.html), you can upload the `dist` directory to the S3 bucket and then use this `index.html` file as the entry point when prompted. Please note that you will still need to set up a storage engine (e.g., Firebase or Supabase) to store the data collected from your study and update the `.env` file accordingly.
-
-### Q: I have to store my data in a specific country / region. How do I do this with Firebase?
-
-A: Firebase lets you choose the region for both Firestore and Storage. Please see [here](https://firebase.google.com/docs/firestore/locations) for documentation on how to choose these regions for both the Real Time Database and Cloud Firestore/Cloud Storage.
-
-### Q: I don't want to use Firebase, what other options do I have?
-
-A: We also support an open, self-hosted alternative to Firebase called Supabase. You will have to run this on a server you control. For details, see the [documentation](../data-and-deployment/supabase/setup/).
-
-### Q: How do I store data in some other database?
-
-A: In short: we don't support other databases. However, reVISit is designed with "storage engines" in mind. By default, we use the local storage engine (data being stored directly on the user's computer) for development or for in-lab studies and the firebase storage engine for production builds. However, we do have plans to create additional storage engines for cases where a study creator has a backend server hooked up to a database (such as MySQL). In the meantime, you can view the [source code](https://github.com/revisit-studies/study/tree/main/src/storage/engines) to design your own storage engine that best fits your needs. If you make a storage engine to suit your own needs, please consider making a [pull request](https://github.com/revisit-studies/study/pulls) so that we can improve reVISit for all users.
-
-### Q: I had Firebase connected but it no longer works locally. What happened?
-
-A: A common issue is that the debug token changes while you are developing. Whenever you clear the cache, your debug token might change which means you'll have to re-register the debug token in the App Check section of Firebase. [Review the tutorial](../data-and-deployment/firebase/setup/#adding-an-app-to-the-firebase-project) to see how to register a debug token.
-
-:::warning
-A common issue in Google Chrome is the debug token changing whenever the application is restarted or the page is refreshed. To solve this issue you will have to exit Chrome and re-launch it.
-:::
-
-### Q: I see two different times reported for the duration of a trial, one of them is called "clean time". What is that?
-
-A: We report the total time it took a participant to complete a task as duration, but we also report a **clean time** duration that subtracts inactive periods from the total time. Technically, we determine that a browser window is inactive for a period of time based on the [`visibilitychange event`](https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilitychange_event), which fires, e.g., when the participant switches to a different tab. We subtract that inactive time from the total duration for the clean time. It's often the case that a participant gets distracted and does something unrelated to the study, and then comes back to the study to continue. Clean time is a way to identify these situations and prevent extreme outliers from being considered in timing data. However, there are ways for participants to become distracted that are not tracked by clean time, such as when they step away from their computer and keep their browser open.
-
-### Q: Can I include metadata from my study configuration in a tidy CSV export?
-
-A: Yes. You can attach metadata to components in your study configuration using the [`meta`](../typedoc/interfaces/BaseIndividualComponent/#meta) field. When you download data as a [tidy CSV](../analysis/data-export/), open the CSV Exporter and enable the `meta` attribute to include that metadata in the exported file. This is useful for carrying condition labels or other task-level annotations into your analysis.
-
-### Q: What happens if there's an error during study initialization?
-
-A: ReVISit has built-in error handling so your study can still run even if something goes wrong with the storage engine connection. If an error happens during setup, reVISit will show a warning message, fallback to local storage for data storage, and continue running the study. Participants are notified that their data will only be stored locally on their machine and not uploaded to the cloud, with a prompt to contact the study administrator.
-
-
-
-### Q: How can I ensure balanced numbers of participants between conditions in my between subjects study design?
-
-A: There are several strategies to ensure balanced participant numbers between conditions in your between subjects study design using reVISit:
-
-1. **Assigning participants to conditions via URL parameters**: You can assign participants to specific conditions via URL parameters using [study conditions](../designing-studies/sequences/url-conditions/). This enables you to create custom recruitment links for each condition, making it easier to control participant distribution.
-1. **Latin square design**: As described in the [Study Sequences documentation](../designing-studies/sequences/study-sequences/#latin-square), you can use Latin square sequences to systematically vary the order of conditions across participants. This helps ensure that each condition appears in each position equally often. However, be aware that if participants drop out or are rejected, this can affect the balance (see the documentation of [Latin squares](../designing-studies/sequences/study-sequences/#latin-square) for more details).
-1. **Random assignments**: If you are recruiting a large number of participants, random assignment to conditions can help achieve balance over time. While this method may not guarantee perfect balance at any given moment, it tends to even out as more participants are added. This is a viable option when strict balancing is less critical.
-1. **Setting up separate studies**: When precise control is needed, consider setting up separate studies for each condition. This allows you to monitor and control the number of participants in each condition directly. However, this comes at the cost of increased administrative overhead (e.g., separate recruitment links, separate datasets, separate specifications).
-
-### Q: Why does my participant data appear on the deployed site but not in my local dashboard?
-
-A: The technical answer is that when running locally with yarn serve, reVISIT prefixes all Firestore collections with dev-, while the deployed production site uses prod-. This means your local dashboard will look for data in dev-studyId and won't find data collected by the production site, which is stored under prod-studyId.
-
-To view production data locally, run `yarn build && npx vite preview` instead of yarn serve. Note that setting NODE_ENV=production will not fix this, as the prefix is driven by Vite's import.meta.env.DEV flag, which is only set to false when running a production build.
diff --git a/versioned_docs/version-v2.4.1/getting-started/collecting-data.md b/versioned_docs/version-v2.4.1/getting-started/collecting-data.md
deleted file mode 100644
index d858343da3..0000000000
--- a/versioned_docs/version-v2.4.1/getting-started/collecting-data.md
+++ /dev/null
@@ -1,61 +0,0 @@
-# Collecting Data Locally
-
-Now that we have a working study, we'll look at how we can start collecting data.
-
-By default, reVISit does not collect data. This is because you don't need to collect data while you're developing your study. Rather, you want to work on your stimuli and study design first, and then, when you're ready to test you can enable data collection.
-
-ReVISit supports two modes of data collection:
-
-1. Storing data on your **local computer**. This is useful for testing and if you are running an in-lab study. Local storage is also easy to set up.
-2. Storing data on **Firebase or Supabase, a cloud storage provider**. This is useful and necessary if you want to run an online study.
-
-In this getting-started guide, we will **only cover local storage**. For setting up cloud storage, please refer to the [Firebase tutorial](../data-and-deployment/firebase/setup.md) or [Supabase tutorial](../data-and-deployment/supabase/setup.md).
-
-## Recording Data
-
-Take the survey that you have created earlier! After you are done, use the menu on the top right, select "Next Participant" and take the survey again (using different values). Now you have recorded data for two participants.
-
-
-
-## Accessing Data
-
-To access the data, go to the analysis interface by visiting the root of reVISit at http://localhost:8080/, and clicking "Analyze & Manage Study" in the study card on the bottom-right. This will get you to the analysis interface that will show all studies in your reVISit instance, including the one you just created `basic-questionnaire-study`.
-
-
-
-You can now download your data either "flattened" in tabular data format (as ["tidy data"](https://r4ds.hadley.nz/data-tidy.html#sec-tidy-data)), or you can download the full nested JSON file. For more information on downloading data, refer to [Data Export](../../analysis/data-export/).
-
-
-
-:::info
-Note that the JSON data contains much more detailed data, including logs about mouse movements and browser fingerprints of participants.
-:::
-
-You can also preview your data in the [Participant View](../analysis/participant-view.md) or [Trial Stats](../analysis/trial-stats.md), which is especially useful if you're debugging your study.
-
-## Resetting your Local Database
-
-The data collected locally is stored in your browser and associated with the page. If you want to clear the data, e.g., because you have completed your pilots and are ready to start a study, you will need to reset the local storage of your browser associated with reVISit. How this works varies between browsers. For Chrome:
-
-- Click the Tune Icon for reVISit or the Info Icon for localhost in the URL bar
-- Select "Site Settings"
-- Click "Delete Data"
-- Reload the page
-
-
-
-This will clear your database.
-
-:::warning
-This cannot be undone. Be sure to back up your data if it is valuable.
-:::
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/getting-started/how-does-it-work.md b/versioned_docs/version-v2.4.1/getting-started/how-does-it-work.md
deleted file mode 100644
index e7bb8d34f0..0000000000
--- a/versioned_docs/version-v2.4.1/getting-started/how-does-it-work.md
+++ /dev/null
@@ -1,165 +0,0 @@
-# How Does It Work?
-
-To create a study with reVISit, you have to create **components** that contain the content of your study, and you have to create the **study configuration (the reVISit Spec)** that controls when and how these components are shown to participants. Here, we will introduce these at a high level and link to the [detailed documentation](../../typedoc/) where appropriate.
-
-# Components
-
-Components are where study-specific content goes. ReVISit supports many types of components:
-
-- **[Markdown Files](../../typedoc/interfaces/MarkdownComponent)** contain formatted text, including links, images, embedded videos, etc. They are useful for introductions, consent forms, help pages, etc.
-- **[Images](../../typedoc/interfaces/ImageComponent)** and **[Videos](../../typedoc/interfaces/VideoComponent)** can be used as stimuli directly.
-- **[Web Pages](../../typedoc/interfaces/WebsiteComponent)** can be used to create custom stimuli, including interactive stimuli developed with JavaScript.
-- **[React Components](../../typedoc/interfaces/ReactComponent)** can be used for sophisticated interactive stimuli. In comparison to HTML pages, react components simplify the communication between reVISit and the stimulus.
-- **[Vega and Vega-lite Components](../../typedoc/type-aliases/VegaComponent)** can be used to create declarative visualization stimuli. Vega components integrate with reVISit's provenance system and track user interactions with the visualization.
-- **[Survey Questions](../../typedoc/interfaces/QuestionnaireComponent)** can be used to elicit structured responses from participants.
-
-All of these stimuli can be (and commonly are) paired with **responses**. Responses are form elements that capture the elicited responses. Survey questions are basically empty components with responses.
-
-A component is typically defined in the spec, with the text, code, or image included from a file/URL. The only exception is survey questions, which do not need a file/URL and are specified directly in the spec.
-
-# The reVISit Spec
-
-The [reVISit Spec](../../typedoc/interfaces/StudyConfig) enables you to define the details of your experiment as a configuration file. This configuration file can be written in either **JSON** or **YAML** format—both are fully supported and work identically.
-
-:::info
-JSON is recommended for most users because it provides schema validation support in IDEs like VSCode, giving you autocomplete and error detection. YAML is an alternative that offers cleaner syntax and comment support but has limited IDE validation.
-:::
-
-The reVISit Spec has five top-level concepts:
-
-- **Study Metadata** — specifying things like the name of the study, authors, contact e-mails
-- **UI Config** — parameterizing the appearance of reVISit
-- **Components** and **BaseComponents** — setting up the content of the study
-- **Sequence** — choosing the order and the selection of tasks participants see
-- **Imported Libraries** — specifying common components/sequences that you can use in your study
-
-We'll explain the ideas in the next section, and link to the documentation for more details.
-
-Check out the [detailed documentation](../../typedoc/interfaces/StudyConfig) for the reVISit Spec.
-
-## Study Metadata
-
-The study metadata defines elements such as the study title, authors, and description. The title and description are shown on the landing page when you have multiple studies. The other fields are hidden to the user, but are saved to the database with participant tracking information. This allows you to see which version of the study a participant took. For more detailed documentation on the study metadata, check out the [documentation](../../typedoc/interfaces/StudyMetadata).
-
-## UI Configuration
-
-The UI configuration tells reVISit how the UI should be laid out, such as which image to use for the study logo, whether to include a sidebar, etc. For more detailed documentation on the UI configuration, check out the [documentation](../../typedoc/interfaces/UIConfig).
-
-## Specifying Components in the Spec
-
-Components are the building blocks for each study. Each component extends the [BaseIndividualComponent](../../typedoc/interfaces/BaseIndividualComponent) interface. To add a component to your study (which can be thought of as a “page” of your study), you add a JSON object representing that component to the `components` object using a freely choosable key. The `type` key in that JSON object controls which type of component you are referring to.
-
-### Collecting Responses
-
-Each component has a list of responses which represents a set of questions to ask the user for that particular component. The user can describe where the question should be displayed in the UI, the instruction for the response, and the type of response input (e.g., a [numerical response](../../typedoc/interfaces/NumericalResponse), a [dropdown](../../typedoc/interfaces/DropdownResponse), a [slider](../../typedoc/interfaces/SliderResponse), etc.). Each response interface extends the [BaseResponse](../../typedoc/interfaces/BaseResponse) interface.
-
-The below example illustrates a simple consent component that is based on a Markdown file and has a response that asks for a signature, nested inside the `components` block:
-
-```json title="public/example-brush-interactions/config.json"
-"components":{
- "consent": {
- "type": "markdown",
- "path": "example-brush-interactions/assets/consent.md",
- "nextButtonText": "Agree",
- "response": [
- {
- "id": "signature",
- "prompt": "Your signature",
- "required": true,
- "location": "belowStimulus",
- "type": "shortText",
- "placeholder": "Please provide your signature"
- }
- ]
- }
-}
-```
-
-For more detailed documentation on the response section, check out the [documentation](../../typedoc/interfaces/BaseResponse).
-
-## Base Components and Inheritance
-
-[Base Components](../../typedoc/interfaces/StudyConfig#properties) can be used to implement inheritance for components. This is often useful if you want to parameterize a component. For example:
-
-- You might have a stimulus, such as an image, about which you want to ask multiple different questions on separate pages.
-- You might have a generic implementation of a stimulus, such as a bar chart, and you want to pass in data to change how the stimulus appears.
-
-In both of these cases, you can set up a component once as a `BaseComponent`, including linking to the stimulus and including (partial) responses, but then later write inherited, short components that extend the base component with the specific functionality you want.
-
-For examples of how to write a base component, refer to the [documentation](../../typedoc/type-aliases/BaseComponents/) and to the [relevant tutorial](../designing-studies/html-stimulus.md).
-
-## Sequence
-
-The sequence object of the study configuration defines (a) the order participants see your components and (b) determines which components they see. ReVISit supports sophisticated ordering strategies, interruptions and skip logic. Specifically, reVISit supports:
-
-- **Ordering Strategies:**
- - **Fixed** order: participants see the components the way they are defined in the sequence
- - **Random** order: the order of the components are randomized
- - **[Latin square](https://en.wikipedia.org/wiki/Latin_square)** order: permute the order of stimuli but ensure that for a set of participants, each component occurs at each index an equal amount of times throughout the sequence (e.g. if there are 100 participants and 10 components, each component is seen at each index 10 times)
-- **Sampling:** `numSamples` draws a given number of items from a block. `numSamples` can be used in combination with each ordering strategy (while preserving ordering guarantees)
-- **Interruptions** can be used to insert breaks and attention checks into a block
-- **Skips** can be used to control flow based on the response to a question or a component block
-- **Study Conditions** can be used to run different versions of your study using URL parameters
-
-All of these can be applied on arbitrarily nested "blocks": an entry in the `components` list can either be the name of a component or another component block. For example, the overall structure of a study can be linear (introduction, consent, tutorial, trials, survey), but within trials we can use random order.
-
-```json title="public/example-brush-interactions/config.json"
-"sequence": {
- "order": "fixed",
- "components": [
- "introduction",
- "consent",
- "tutorial",
- {
- "order": "random",
- "components": [
- "paintBrush_q1",
- "rectangleBrush_q1",
- "axisBrush_q1",
- "sliderBrush_q1"
- ]
- },
- "post-study-survey",
- "survey"
- ]
-}
-```
-
-You can find more detailed documentation about the sequencing strategies [here](../../typedoc/interfaces/ComponentBlock).
-
-## Stored Data
-
-When participants interact with your study, reVISit automatically collects and stores data about their participation. This data is structured as [ParticipantData](../../typedoc/interfaces/ParticipantData) objects, which contain all information about each participant's session.
-
-### Participant Data
-
-Each participant's data includes:
-
-- **Participant Information**: A unique identifier for each participant and metadata (browser type, screen size, language, and IP address)
-- **Study Config**: Which version of your study configuration the participant received
-- **Sequence**: The order in which components were shown to the participant
-- **Responses**: All answers provided by the participant across all components
-
-### Stored Answer
-
-For each component a participant interacts with, reVISit stores a [StoredAnswer](../../typedoc/interfaces/StoredAnswer) object that includes:
-
-- **Responses**: The responses the participant provided
-- **Interaction Data**: Timing information (start and end times) and a log of interactions including mouse movements, keyboard input, scrolling, and visibility events
-- **Provenance Graphs**: A graph structure that tracks the sequence of meaningful state changes in the component.
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/getting-started/img/analyze-manage-study.png b/versioned_docs/version-v2.4.1/getting-started/img/analyze-manage-study.png
deleted file mode 100644
index 6e5f87dab8..0000000000
Binary files a/versioned_docs/version-v2.4.1/getting-started/img/analyze-manage-study.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/getting-started/img/delete-local-database.png b/versioned_docs/version-v2.4.1/getting-started/img/delete-local-database.png
deleted file mode 100644
index e6476d5145..0000000000
Binary files a/versioned_docs/version-v2.4.1/getting-started/img/delete-local-database.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/getting-started/img/download-data.png b/versioned_docs/version-v2.4.1/getting-started/img/download-data.png
deleted file mode 100644
index 522b0e8de1..0000000000
Binary files a/versioned_docs/version-v2.4.1/getting-started/img/download-data.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/getting-started/img/fork-repo.png b/versioned_docs/version-v2.4.1/getting-started/img/fork-repo.png
deleted file mode 100644
index f32d862225..0000000000
Binary files a/versioned_docs/version-v2.4.1/getting-started/img/fork-repo.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/getting-started/img/next-participant.png b/versioned_docs/version-v2.4.1/getting-started/img/next-participant.png
deleted file mode 100644
index 22f294680c..0000000000
Binary files a/versioned_docs/version-v2.4.1/getting-started/img/next-participant.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/getting-started/img/template-repo.png b/versioned_docs/version-v2.4.1/getting-started/img/template-repo.png
deleted file mode 100644
index 34fd2548bf..0000000000
Binary files a/versioned_docs/version-v2.4.1/getting-started/img/template-repo.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/getting-started/index.md b/versioned_docs/version-v2.4.1/getting-started/index.md
deleted file mode 100644
index 99cdb9e1ce..0000000000
--- a/versioned_docs/version-v2.4.1/getting-started/index.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Getting Started
-
-If you'd like to get started right out of the gates with a small tutorial, you can begin in the [installation section](installation) and then move on to the [tutorial where you'll create a simple questionnaire](your-first-study). If you'd rather read more about the inner workings of reVISit — specifically how the studies in reVISit are created, designed, and maintained — you can visit the [How Does It Work](how-does-it-work) section first.
-
-
-import DocCardList from '@theme/DocCardList';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/getting-started/installation.md b/versioned_docs/version-v2.4.1/getting-started/installation.md
deleted file mode 100644
index 5d31848fc7..0000000000
--- a/versioned_docs/version-v2.4.1/getting-started/installation.md
+++ /dev/null
@@ -1,92 +0,0 @@
-# Installation
-
-ReVISit project is open-source – meaning anyone can see the entire codebase. Most of the work that is done to create a new study is done by making changes to this codebase.
-
-For most users, the best place to start is the template repository (first option below). If you want all demos and tighter upstream parity, or are considering contributing to reVISit, we recommend you fork the repository instead.
-
-## Starting from the Template Repository (Recommended)
-
-Navigate to the [template repository](https://github.com/revisit-studies/template), and click the "Use this template" button. This will create a new repository in your GitHub account with the same files as the template repository, based on the latest stable release of reVISit.
-
-
-
-:::info
-You can choose a name for the repository to suit your needs, but if you choose anything other than `study`, you also need to adjust the `VITE_BASE_PATH` in your [`.env`](https://github.com/revisit-studies/study/blob/main/.env) file to reflect that change.
-:::
-
-You can then clone this new repository to your local machine and start making changes to it and share it with collaborators as desired.
-
-This template is a minimal setup intended for creating your own study project quickly. Unlike the main `study` repository, it does not include all demo studies, so the codebase is easier to navigate and customize.
-
-This is the preferred approach when you do not need cutting-edge changes (for example, from `dev`) and want a more stable baseline to build from. Unlike a fork, the new repository is not linked to the upstream repository's fork network, which helps keep your project lightweight and focused on your own study. You can also create as many repositories as you want from the template, which is not possible with forking.
-
-:::info
-Most likely, you will **receive a warning from GitHub about a potential security issue** as an API key is being shared, with a subject like "Possible valid secrets detected".
-You can safely ignore this warning. The reason for this is that the Firebase API key is not a secret key, and it is intended to be shared publicly in client-side code. For more information, see the [Firebase documentation on API keys](https://firebase.google.com/docs/projects/api-keys#api_key_security_recommendations).
-:::
-
-## Forking Repository (Advanced Alternative to Template Repository)
-
-Forking the repository is a more advanced option that allows you to have a copy of the entire `study` repository in your GitHub account. This means that you will have access to all the demo studies and that you can choose to follow the latest changes from the main repository (e.g., by following the `dev` branch). However, it also means that your repository will be linked to the upstream repository's fork network, which can make it more complex to manage.
-
-To fork, start by navigating to the following GitHub repository: https://github.com/revisit-studies/study
-
-You should see a "fork" button on the same row as the name of the repository. When you fork a repository, you are essentially creating your own copy of the repository in your GitHub account. This means that any changes you commit and push to this new repository will not affect the main source code.
-
-
-
-:::info
-GitHub only allows you to fork a repository once. If you have already forked the repository, you will need to clone the repository to your local machine, create a new repo on your account, and run `git remote set-url origin new.git.url/here` to allow you to have 2 versions of the repository in your account.
-:::
-
-When forking the repository, you will be prompted for some basic information about this repository (such as the desired name). Once you've forked the repository into your own GitHub account, you can [clone the repository to your local computer](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository).
-
-:::info
-You can rename the repository to suit your needs, but if you change the name, you also need to adjust the `VITE_BASE_PATH` in your [`.env`](https://github.com/revisit-studies/study/blob/main/.env) file to reflect that change.
-:::
-
-After the repository is on your local machine, you will have the entire codebase for your personal use. Any changes that you make to this repository can be committed and then pushed to your forked repository for other users in your organization to see.
-
-## Installing Required Software
-
-To continue, you will need the Active LTS [Node.js](https://nodejs.org/) version, and [Yarn](https://yarnpkg.com/) installed. If you already have Yarn installed, you can go to Step 2 below.
-
-:::info
-Yarn requires that you have the package manager NPM installed. If you do not have NPM installed, please review the [NPM documentation](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) to get started. These docs will also direct you on how to install Node – a prerequisite of NPM.
-:::
-
-**Step 1: Install Yarn on your local computer using NPM:**
-
-```npm i -g yarn```
-
-**Step 2: Once Yarn is successfully installed, navigate to your local repository and run the following Yarn command:**
-
-```yarn install```
-
-This will install all the packages that the reVISit requires to run.
-
-**Step 3: Once this is finished, you can now start the program:**
-
-```yarn serve```
-
-This will launch a local web server which can be accessed to view and interact with reVISit. By default, you can access this by visiting [http://localhost:8080/](http://localhost:8080/). Any change you make to the code will automatically update the website.
-
-When you visit the site, you'll see a list of demo studies, identical to [the demo page](https://revisit.dev/study/). You can interact with any of these studies to get some familiarity (and hopefully some inspiration) for how reVISit can help you quickly launch a crowd-sourced visualization study.
-
-:::warning
-We do not support using `npm` to run reVISit. Please use `yarn` for all package management and running commands.
-:::
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/getting-started/your-first-study.md b/versioned_docs/version-v2.4.1/getting-started/your-first-study.md
deleted file mode 100644
index 4c6fee64c9..0000000000
--- a/versioned_docs/version-v2.4.1/getting-started/your-first-study.md
+++ /dev/null
@@ -1,166 +0,0 @@
-# Setting Up Your First Study
-
-In this tutorial we will use the example of a simple survey. You will learn:
-
-* How to set up your own copy of reVISit.
-* How to write a simple reVISit spec with survey questions split into multiple pages.
-* How to register your study with reVISit so it shows up on your local web-server.
-* How to run the local webserver and access / preview your study.
-
-:::info
-It is easiest to use an IDE for developing reVISit studies. We suggest something like [VSCode](https://code.visualstudio.com/) since it has JSON autocomplete, which will make it much easier to write a reVISit Spec.
-
-While this tutorial uses JSON, you can also write your configuration in YAML format.
-:::
-
-## Setting Up Repos and Files
-
-After cloning your fork of the repository to your computer, you’ll see that the repository consists of many high level directories. For this tutorial, we will solely be working with the `public` directory. Start by making a new directory called `basic-questionnaire-study` in the `public` directory. Inside this folder, create another directory called `assets`. The assets directory will be where all of our various components are held.
-
-Once that is done, we will make an intro markdown component. Create a file `introduction.md` in the `basic-questionnaire-study/assets` folder with the following contents:
-
-```markdown title="public/basic-questionnaire-study/assets/introduction.md"
-# Introduction
-
-Welcome to our study. This is a basic questionnaire study. We will only ask you a few questions and then we will be done.
-```
-
-Next, let’s create a `help.md` file in the same folder, so that participants during the study are able to get help.
-
-```markdown title="public/basic-questionnaire-study/assets/help.md"
-# Help
-
-This is a questionnaire. For each question, be sure to provide an answer and then click **Next** when you’re ready to move onto the next question.
-```
-
-## Writing a reVISit Spec
-
-Now we are ready to create the configuration file for the study. This configuration defines how our study is laid out, provides some basic information about yourself (the creator), and describes which components will be added to the study.
-
-Create a new file called `config.json` in `basic-questionnaire-study`. Then, copy and paste the following code into the new file.
-
-```json title="public/basic-questionnaire-study/config.json"
-{
- "$schema": "https://raw.githubusercontent.com/revisit-studies/study/main/src/parser/StudyConfigSchema.json",
- "studyMetadata": {
- "title": "Basic Questionnaire Study",
- "version": "pilot",
- "authors": [
- "The reVISit Team",
- "You :)"
- ],
- "date": "2026-02-23",
- "description": "A simple questionnaire study",
- "organizations": [
- "University of Utah",
- "WPI"
- ]
- },
- "uiConfig": {
- "contactEmail": "your@email.com",
- "helpTextPath": "basic-questionnaire-study/assets/help.md",
- "logoPath": "revisitAssets/revisitLogoSquare.svg",
- "withProgressBar": true,
- "autoDownloadStudy": false,
- "withSidebar": true
- },
- "components": {
- "introduction": {
- "type": "markdown",
- "path": "basic-questionnaire-study/assets/introduction.md",
- "response": []
- },
- "first-question-set": {
- "type": "questionnaire",
- "response": [
- {
- "id": "q1-name",
- "prompt": "What is your first name?",
- "required": true,
- "location": "aboveStimulus",
- "type": "longText",
- "placeholder": "Please enter your first name"
- },
- {
- "id": "q2-color",
- "prompt": "What is your favorite color?",
- "required": true,
- "location": "aboveStimulus",
- "type": "dropdown",
- "placeholder": "Please choose your favorite color",
- "options": ["Red", "Blue", "My favorite color is not shown here."]
- }
- ]
- },
- "second-question-set": {
- "type": "questionnaire",
- "response": [
- {
- "id": "q3-satisfaction",
- "prompt": "Rate your satisfaction with this survey from 1 (not enjoyable) to 5 (very enjoyable).",
- "required": true,
- "location": "aboveStimulus",
- "type": "likert",
- "leftLabel": "Not Enjoyable",
- "rightLabel": "Very Enjoyable",
- "numItems": 5
- }
- ]
- }
- },
- "sequence": {
- "order": "fixed",
- "components": [
- "introduction",
- "first-question-set",
- "second-question-set"
- ]
- }
-}
-```
-
-The above code uses a [long text input](../../typedoc/interfaces/LongTextResponse), a [drop-down input](../../typedoc/interfaces/DropdownResponse), and a [likert scale input](../../typedoc/interfaces/LikertResponse/). The questions are split up into two "pages", the `first-question-set` and the `second-question-set`. The sequence is a simple linear sequence showing intro, first question and then second question set.
-
-## Registering the Study
-
-Now, our study is almost set up to view. The last step is to make sure that reVISit knows where to find your study. To do that, you will need to edit the `global.json` file in the `public` directory and add the following code to the `configs` object:
-
-```json title="public/global.json"
-"basic-questionnaire-study": {
- "path": "basic-questionnaire-study/config.json"
-}
-```
-
-After this, add `basic-questionnaire-study` into the `configsList` list in the same file. Because the configs list is ordered, make sure to put `basic-questionnaire-study` at the top of the list so you can immediately see it. This is what this should look like:
-
-```json title="public/global.json"
-"configsList": [
- "basic-questionnaire-study",
- "demo-html",
- ...
-]
-```
-
-## Running the Server
-
-Now, if you start the server (using `yarn serve` as described in the [Installation](./installation.md) section), you'll be able to navigate to http://localhost:8080/ and view your study in the list of studies. Alternatively, you can navigate to http://localhost:8080/basic-questionnaire-study to view the study directly.
-
-You should now see your study and be able to navigate quickly through it. However, your study is currently set up for development, so you won't be collecting any data yet. Go to the next getting started guide to learn how to enable data collection and download your data.
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/img/faq/storage-disconnected.png b/versioned_docs/version-v2.4.1/img/faq/storage-disconnected.png
deleted file mode 100644
index 1b828de210..0000000000
Binary files a/versioned_docs/version-v2.4.1/img/faq/storage-disconnected.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/img/revisit-overview.png b/versioned_docs/version-v2.4.1/img/revisit-overview.png
deleted file mode 100644
index fad4223412..0000000000
Binary files a/versioned_docs/version-v2.4.1/img/revisit-overview.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/introduction.md b/versioned_docs/version-v2.4.1/introduction.md
deleted file mode 100644
index 3d044a2dea..0000000000
--- a/versioned_docs/version-v2.4.1/introduction.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# Introduction
-
-ReVISit lets you create interactive, web-based studies using a **JSON-based domain-specific language (the reVISit DSL)** and a set of **stimuli contained in components**.
-The overall process is illustrated in the figure below:
-
-
-
-First, specify the details of your study in the **reVISit DSL (1)** — including which components to use, what data to collect, and in what sequence they will appear.
-
-**Your stimuli live in components (2).** Components can be images, videos, interactive HTML pages, React components, or Vega code. You can use existing components from the reVISit library or create your own custom ones.
-
-Next, use the **(3) Compile & Deploy** process to combine your reVISit specification and components into an **(4) interactive study web app.** You can then deploy this app to any web server.
-
-When you’re ready to run your study, **(5) recruit participants** through platforms like Prolific or Mechanical Turk, or via social media, e-mail, or in-person recruitment.
-
-Participant responses are automatically stored in the **(6) data store**, which can be local storage or cloud-based options such as Firebase or Supabase.
-
-You can then **(7) monitor your study** using reVISit’s replay tools and participant overviews to review preliminary results.
-
-Finally, **(8) download your data** for analysis in your preferred environment, such as R or Python.
-
-In the tutorials section, we’ll walk you through a simple example to create your first study with reVISit!
-
-You can also check out this video introduction to reVISit:
-
-
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/libraries/adaptive-vlat.md b/versioned_docs/version-v2.4.1/libraries/adaptive-vlat.md
deleted file mode 100644
index 405fc93633..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/adaptive-vlat.md
+++ /dev/null
@@ -1,46 +0,0 @@
-
-# adaptive-vlat
-
-
-
-A-VLAT is a short, adaptive visualization literacy test, which are built upon the existing static assessments VLAT.
-
-This library contains a sequence of the full A-VLAT questionnaire.
-
-The component `VlatTrial` in this library is part of the sequence and should not be used alone.
-
-## Reference
-
-:::note[Reference]
-Y. Cui, L. W. Ge, Y. Ding, F. Yang, L. Harrison and M. Kay, Adaptive Assessment of Visualization Literacy, IEEE Transactions on Visualization and Computer Graphics, vol. 30, no. 1, pp. 628-637, Jan. 2024
-:::
-
-DOI: [10.1109/TVCG.2023.3327165](https://dx.doi.org/10.1109/TVCG.2023.3327165)
-
-
-
-## Available Components
-
-- VlatTrial
-
-## Available Sequences
-
-- adaptive-vlat
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/beauvis.md b/versioned_docs/version-v2.4.1/libraries/beauvis.md
deleted file mode 100644
index 083f5b25ca..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/beauvis.md
+++ /dev/null
@@ -1,46 +0,0 @@
-
-# beauvis
-
-
-
-BeauVis is a validated scale for assessing the aesthetic pleasure of visualizations. This library contains three components for the 3-, 4-, and 5-item versions of the BeauVis scale.
-
-When using this library, please replace the `vis-example.png` file with your own visualization.
-
-## Reference
-
-:::note[Reference]
-T. He, P. Isenberg, R. Dachselt, and T. Isenberg, “BeauVis: A Validated Scale for Measuring the Aesthetic Pleasure of Visual Representations,” IEEE Transactions on Visualization and Computer Graphics, pp. 1–11, 2022
-:::
-
-DOI: [10.1109/tvcg.2022.3209390](https://dx.doi.org/10.1109/tvcg.2022.3209390)
-
-Link: [https://www.aviz.fr/Research/BeauVis-Scale](https://www.aviz.fr/Research/BeauVis-Scale)
-
-## Available Components
-
-- 3items
-- 4items
-- 5items
-
-## Available Sequences
-
-None
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/berlin-num.md b/versioned_docs/version-v2.4.1/libraries/berlin-num.md
deleted file mode 100644
index d7cabadc58..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/berlin-num.md
+++ /dev/null
@@ -1,47 +0,0 @@
-
-# berlin-num
-
-
-
-The Berlin Numeracy Test is a psychometrically sound instrument that quickly assesses statistical numeracy and risk literacy. It contains 4 questions. This library contains four components, each is a question from the Berlin Numeracy Test. There are two sequences: a four-item sequence and a single-item sequence. The four-item sequence is the traditional Berlin Numeracy Test and contains all 4 questions. The single-item sequence is the single question version and contains only question 1.
-
-## Reference
-
-:::note[Reference]
-Cokely ET, Galesic M, Schulz E, Ghazal S, Garcia-Retamero R. Measuring Risk Literacy: The Berlin Numeracy Test. Judgment and Decision Making. 2012;7(1):25-47.
-:::
-
-DOI: [10.1017/S1930297500001819](https://dx.doi.org/10.1017/S1930297500001819)
-
-Link: [http://www.riskliteracy.org/](http://www.riskliteracy.org/)
-
-## Available Components
-
-- q1-choir-probability
-- q2a-dice-odd-numbers
-- q2b-loaded-dice
-- q3-poisonous-mushrooms
-
-## Available Sequences
-
-- adaptive
-- four-items
-- single-item
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/calvi.md b/versioned_docs/version-v2.4.1/libraries/calvi.md
deleted file mode 100644
index ec5299cdae..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/calvi.md
+++ /dev/null
@@ -1,103 +0,0 @@
-
-# calvi
-
-
-
-The Critical Thinking Assessment for Literacy in Visualizations (CALVI) library is a collection of visualizations and questions designed to assess the ability to interpret data visualizations. The library includes a variety of visualizations, such as line graphs, bar charts, and pie charts, along with corresponding questions that test the user's understanding of the data presented. The questions are designed to be challenging and require critical thinking skills to answer correctly.
-
-## Reference
-
-:::note[Reference]
-Lily W. Ge, Yuan Cui, and Matthew Kay. 2023. CALVI: Critical Thinking Assessment for Literacy in Visualizations. In Proceedings of the 2023 CHI Conference on Human Factors in Computing Systems (CHI '23). Association for Computing Machinery, New York, NY, USA, Article 815, 1-18.
-:::
-
-DOI: [10.1145/3544548.3581406](https://dx.doi.org/10.1145/3544548.3581406)
-
-
-
-## Available Components
-
-- N1
-- N10
-- N11
-- N12
-- N13
-- N14
-- N15
-- N2
-- N3
-- N4
-- N5
-- N6
-- N7
-- N8
-- N9
-- T1
-- T10
-- T11
-- T12
-- T13
-- T14
-- T15
-- T16
-- T17
-- T18
-- T19
-- T2
-- T20
-- T21
-- T22
-- T23
-- T25
-- T26
-- T27
-- T28
-- T29
-- T3
-- T30
-- T34
-- T35
-- T36
-- T37
-- T38
-- T39
-- T4
-- T40
-- T42
-- T43
-- T44
-- T45
-- T46
-- T47
-- T48
-- T49
-- T5
-- T50
-- T52
-- T6
-- T8
-- T9
-
-## Available Sequences
-
-- full
-- fullBank
-- specificBank
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/color-blindness.md b/versioned_docs/version-v2.4.1/libraries/color-blindness.md
deleted file mode 100644
index 50d631997c..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/color-blindness.md
+++ /dev/null
@@ -1,64 +0,0 @@
-
-# color-blindness
-
-
-
-This library is the Ishihara color blindness test. Each component contains an image of an Ishihara plate. The meta attribute of each plate describe what normal vision people, red color blind people, green color blind people, and total color blind people see from this plate. The user is asked to identify the number or pattern in the image. The library also contains two sequences: a short test and a full test. The short test contains 4 components and the full test contains all 24 components.
-
-## Reference
-
-
-
-
-
-Link: [https://www.colour-blindness.com/colour-blindness-tests/ishihara-colour-test-plates/](https://www.colour-blindness.com/colour-blindness-tests/ishihara-colour-test-plates/)
-
-## Available Components
-
-- plate1
-- plate10
-- plate11
-- plate12
-- plate13
-- plate14
-- plate15
-- plate16
-- plate17
-- plate18
-- plate19
-- plate2
-- plate20
-- plate21
-- plate22
-- plate23
-- plate24
-- plate3
-- plate4
-- plate5
-- plate6
-- plate7
-- plate8
-- plate9
-
-## Available Sequences
-
-- full-test
-- short-test
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/demographics.md b/versioned_docs/version-v2.4.1/libraries/demographics.md
deleted file mode 100644
index 8fad00782e..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/demographics.md
+++ /dev/null
@@ -1,37 +0,0 @@
-
-# demographics
-
-
-
-This is a library for demographic questions. It contains one component, demographics, with three questions: gender, age, and education.
-
-
-
-
-
-
-
-
-
-## Available Components
-
-- demographics
-
-## Available Sequences
-
-None
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/graph-literacy-scale.md b/versioned_docs/version-v2.4.1/libraries/graph-literacy-scale.md
deleted file mode 100644
index cf72507d9a..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/graph-literacy-scale.md
+++ /dev/null
@@ -1,54 +0,0 @@
-
-# graph-literacy-scale
-
-
-
-The Graph Literacy Scale is a 13-item instrument that measures people's ability to understand common graphical formats, with a focus on health-related graphs. This library contains 13 components, each corresponding to a question of the Graph Literacy Scale. It also includes a sequence of all 13 components (the full Graph Literacy Scale).
-
-## Reference
-
-:::note[Reference]
-Galesic M, Garcia-Retamero R. Graph literacy: a cross-cultural comparison. Med Decis Making. 2011 May-Jun;31(3):444-57.
-:::
-
-DOI: [10.1177/0272989X10373805](https://dx.doi.org/10.1177/0272989X10373805)
-
-
-
-## Available Components
-
-- Q1
-- Q10
-- Q11
-- Q12
-- Q13
-- Q2
-- Q3
-- Q4
-- Q5
-- Q6
-- Q7
-- Q8
-- Q9
-
-## Available Sequences
-
-- full
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/mic-check.md b/versioned_docs/version-v2.4.1/libraries/mic-check.md
deleted file mode 100644
index 70dfa5424d..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/mic-check.md
+++ /dev/null
@@ -1,37 +0,0 @@
-
-# mic-check
-
-
-
-This is a library for testing the microphone. It provides a component that listens to the microphone and only enables the next button when audio is detected.
-
-
-
-
-
-
-
-
-
-## Available Components
-
-- audioTest
-
-## Available Sequences
-
-None
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/mini-vlat.md b/versioned_docs/version-v2.4.1/libraries/mini-vlat.md
deleted file mode 100644
index 188f13b33f..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/mini-vlat.md
+++ /dev/null
@@ -1,53 +0,0 @@
-
-# mini-vlat
-
-
-
-Mini-VLAT is a short and effective measure of visualization literacy. Mini-VLAT has 12 questions and participants should answer each question within 25 seconds. This library contains 12 components. Each component contains one question of the Mini-VLAT. This library also contains a sequence of all 12 components (the full Mini-VLAT).
-
-## Reference
-
-:::note[Reference]
-S. Pandey and A. Ottley, “Mini‐VLAT: A Short and Effective Measure of Visualization Literacy,” Computer Graphics Forum, vol. 42, no. 3, pp. 1–11, Jun. 2023
-:::
-
-DOI: [10.1111/cgf.14809](https://dx.doi.org/10.1111/cgf.14809)
-
-
-
-## Available Components
-
-- areachar
-- barchart
-- bubblechart
-- choropleth
-- histogram
-- linechart
-- piechart
-- scatterplot
-- stackedarea
-- stackedbar
-- stackedBar100
-- treemap
-
-## Available Sequences
-
-- full
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/nasa-tlx.md b/versioned_docs/version-v2.4.1/libraries/nasa-tlx.md
deleted file mode 100644
index 8d0b326d87..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/nasa-tlx.md
+++ /dev/null
@@ -1,78 +0,0 @@
-
-# nasa-tlx
-
-
-
-The NASA-TLX is a widely used subjective workload assessment tool. It consists of six subscales: Mental Demand, Physical Demand, Temporal Demand, Performance, Effort, and Frustration. The NASA-TLX is designed to assess the perceived workload of a task and is commonly used in human factors and ergonomics research. We provide a component of the NASA-TLX itself, and a sequence that includes a source of load evaluation. The source of load evaluation is based on the pairwise weighting procedure described in the NASA-TLX manual.
-
-## Reference
-
-:::note[Reference]
-Hart, Sandra G., and Lowell E. Staveland. "Development of NASA-TLX (Task Load Index): Results of empirical and theoretical research." Advances in psychology. Vol. 52. North-Holland, 1988. 139-183.
-:::
-
-DOI: [10.1016/S0166-4115(08)62386-9](https://dx.doi.org/10.1016/S0166-4115(08)62386-9)
-
-
-
-## Available Components
-
-- nasa-tlx
-- source-of-load
-
-## Available Sequences
-
-- nasa-tlx-with-source-of-load-evaluation
-
-## Additional Description
-
-### Source of Workload Evaluation (Pairwise Weighting Procedure)
-
-Reference: [NASA TLX manual](https://ntrs.nasa.gov/api/citations/20000021488/downloads/20000021488.pdf) (Section 2.2)
-
-This step of the NASA-TLX assesses the relative importance of different factors that contribute to a person's experience of workload during a task. Rather than assuming all workload components are equally important, this procedure captures individual differences in how workload is perceived.
-
-Participants are presented with 15 pairwise comparisons between the six NASA-TLX subscales:
-
-- Mental Demand
-- Physical Demand
-- Temporal Demand
-- Performance
-- Effort
-- Frustration
-
-For each pair, participants are asked to select the factor that contributed more to their workload experience in the given task.
-
-#### How It Works
-Each chosen subscale earns one point (a "tally mark").
-
-After 15 comparisons, each subscale has a weight from 0 to 5.
-
-These weights reflect the participant's personal weighting of each workload dimension.
-
-#### How to Use the Result
-After task performance, participants also rate the magnitude (0–100) of each of the six subscales.
-
-For each subscale:
-Adjusted Score = Raw Rating × Weight
-
-The overall workload score is calculated by summing all adjusted scores and dividing by 15:
-Overall Workload = Σ(Adjusted Scores) ÷ 15
-
-This weighted workload score accounts for both perceived intensity and individual prioritization, improving sensitivity and personalization in workload analysis.
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/previs.md b/versioned_docs/version-v2.4.1/libraries/previs.md
deleted file mode 100644
index 5f2c44a5e9..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/previs.md
+++ /dev/null
@@ -1,47 +0,0 @@
-
-# previs
-
-
-
-PREVis allows you to quickly and reliably measure how readable people find a data visualization. There are 4 individual scales in PREVis, each measuring a particular dimension of perceived readability. This library includes four components, one for each individual scale, as well as a sequence containing all four scales (the full PREVis).
-
-When using this library, please replace the `vis-example.png` file with your own visualization.
-
-## Reference
-
-:::note[Reference]
-A.-F. Cabouat, T. He, P. Isenberg, and T. Isenberg, “PREVis: Perceived Readability Evaluation for Visualizations,” IEEE Transactions on Visualization and Computer Graphics, vol. 31, no. 1, pp. 1083–1093, Jan. 2025
-:::
-
-DOI: [10.1109/tvcg.2024.3456318](https://dx.doi.org/10.1109/tvcg.2024.3456318)
-
-Link: [https://aviz.fr/PREVis/](https://aviz.fr/PREVis/)
-
-## Available Components
-
-- Layout
-- ReadingData
-- ReadingFeatures
-- Understand
-
-## Available Sequences
-
-- 4dimensions
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/quis.md b/versioned_docs/version-v2.4.1/libraries/quis.md
deleted file mode 100644
index 8b12960331..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/quis.md
+++ /dev/null
@@ -1,51 +0,0 @@
-
-# quis
-
-
-
-The Questionnaire for User Interaction Satisfaction (QUIS) is a measurement tool designed to assess a computer user's subjective satisfaction with the human-computer interface. The QUIS contains measures of overall system satisfaction and specific interface factors such as screen visibility, terminology and system information, learning factors, and system capabilities. This library includes six components, one for each individual dimension, as well as a sequence containing all dimensions.
-
-## Reference
-
-:::note[Reference]
-Chin, J. P., Diehl, V. A. and Norman, K. L. (1988). Development of an instrument measuring user satisfaction of the human-computer interface. Proceedings of SIGCHI '88, (pp. 213-218), New York: ACM/SIGCHI.
-
- Chin, J. P., Norman, K. L., and Shneiderman, B. (1987). Subjective user evaluation of CF PASCAL programming tools. Technical Report (CAR-TR-304). College Park, MD: Human-Computer Interaction Laboratory, Center for Automation Research, University of Maryland.
-
- Harper, B. D. and Norman, K. L. (1993). Improving User Satisfaction: The Questionnaire for User Interaction Satisfaction Version 5.5. Proceedings of the 1st Annual Mid-Atlantic Human Factors Conference, (pp. 224-228), Virginia Beach, VA.
-:::
-
-
-
-Link: [https://isr.umd.edu/news/story/quis-questionnaire-for-user-interaction-satisfaction-70-isr-ip](https://isr.umd.edu/news/story/quis-questionnaire-for-user-interaction-satisfaction-70-isr-ip)
-
-## Available Components
-
-- learning
-- overall
-- screen
-- system-capabilities
-- terminology-and-system-information
-- usability-and-ui
-
-## Available Sequences
-
-- 6-dimensions
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/sam.md b/versioned_docs/version-v2.4.1/libraries/sam.md
deleted file mode 100644
index f064f2b4ff..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/sam.md
+++ /dev/null
@@ -1,44 +0,0 @@
-
-# sam
-
-
-
-The Self-Assessment Manikin (SAM) is a non-verbal pictorial assessment technique that directly measures the pleasure, arousal, and dominance associated with a person's affective reaction to a wide variety of stimuli. This library includes three components, one for each individual dimension, as well as a sequence containing all dimensions.
-
-## Reference
-
-:::note[Reference]
-Bradley, M. M., & Lang, P. J. (1994). Measuring emotion: The Self-Assessment Manikin and the semantic differential. Journal of Behavior Therapy and Experimental Psychiatry, 25(1), 49–59.
-:::
-
-DOI: [10.1016/0005-7916(94)90063-9](https://dx.doi.org/10.1016/0005-7916(94)90063-9)
-
-
-
-## Available Components
-
-- arousal
-- dominance
-- pleasure
-
-## Available Sequences
-
-- 3-dimensions
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/screen-recording.md b/versioned_docs/version-v2.4.1/libraries/screen-recording.md
deleted file mode 100644
index 17e41abf36..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/screen-recording.md
+++ /dev/null
@@ -1,37 +0,0 @@
-
-# screen-recording
-
-
-
-This is a library for getting screen recording permissions and starting screen recording.
-
-
-
-
-
-
-
-
-
-## Available Components
-
-- screenRecordingPermission
-
-## Available Sequences
-
-None
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/smeq.md b/versioned_docs/version-v2.4.1/libraries/smeq.md
deleted file mode 100644
index c3370620e5..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/smeq.md
+++ /dev/null
@@ -1,39 +0,0 @@
-
-# smeq
-
-
-
-The Subjective Mental Effort Questionnaire (SMEQ) is a single-item scale designed to measure perceived mental effort during a task. This library includes a single component, the SMEQ.
-
-## Reference
-
-:::note[Reference]
-Zijlstra, F. R. H., and L. Van Doorn. The Construction of a Scale to Measure Perceived Effort. Delft University of Technology, 1985.
-:::
-
-
-
-
-
-## Available Components
-
-- smeq
-
-## Available Sequences
-
-None
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/sus.md b/versioned_docs/version-v2.4.1/libraries/sus.md
deleted file mode 100644
index 5443289c83..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/sus.md
+++ /dev/null
@@ -1,42 +0,0 @@
-
-# sus
-
-
-
-The System Usability Scale (SUS) is a 10-item questionnaire that measures perceived ease of use, perceived usefulness, and overall satisfaction with a system. The SUS has been widely used in usability studies and is considered a standard measure of usability. This library contains one component with 10 questions. The component is the full SUS questionnaire with 10 questions.
-
-## Reference
-
-:::note[Reference]
-J. Brooke, “SUS: A ‘Quick and Dirty’ Usability Scale,” Usability Evaluation In Industry, pp. 207–212, Jun. 1996
-:::
-
-DOI: [10.1201/9781498710411-35](https://dx.doi.org/10.1201/9781498710411-35)
-
-
-
-## Available Components
-
-- sus
-
-## Available Sequences
-
-None
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/test.md b/versioned_docs/version-v2.4.1/libraries/test.md
deleted file mode 100644
index 3d8647ebb5..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/test.md
+++ /dev/null
@@ -1,40 +0,0 @@
-
-# test
-
-
-
-This is a test library for testing the parser. It is unlikely to be useful for any other purpose.
-
-
-
-
-
-
-
-
-
-## Available Components
-
-- test-inherited
-- test-md
-- test-react
-
-## Available Sequences
-
-- long
-- small
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/umux-lite.md b/versioned_docs/version-v2.4.1/libraries/umux-lite.md
deleted file mode 100644
index 8877a4f457..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/umux-lite.md
+++ /dev/null
@@ -1,42 +0,0 @@
-
-# umux-lite
-
-
-
-The UMUX-Lite is a two-item questionnaire derived from the original UMUX. It is designed for situations where testing time is limited, offering a brief yet reliable measure of perceived usability. The two statements assess how usable and easy to use you find the system, providing a quick indication of overall user experience quality.
-
-## Reference
-
-:::note[Reference]
-Lewis, James R., Brian S. Utesch, and Deborah E. Maher. "UMUX-LITE: when there's no time for the SUS." Proceedings of the SIGCHI conference on human factors in computing systems. 2013.
-:::
-
-DOI: [10.1145/2470654.2481287](https://dx.doi.org/10.1145/2470654.2481287)
-
-
-
-## Available Components
-
-- umux-lite
-
-## Available Sequences
-
-None
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/umux.md b/versioned_docs/version-v2.4.1/libraries/umux.md
deleted file mode 100644
index 0e4241f7d5..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/umux.md
+++ /dev/null
@@ -1,42 +0,0 @@
-
-# umux
-
-
-
-The evaluation you're about to complete is the Usability Metric for User Experience (UMUX). The UMUX is a short, standardized usability questionnaire developed as a concise and conceptually similar alternative to the System Usability Scale (SUS). It includes four statements designed to assess how effective, efficient, and satisfying you find the system to use.
-
-## Reference
-
-:::note[Reference]
-Finstad, Kraig. "The usability metric for user experience." Interacting with computers 22.5 (2010): 323-327.
-:::
-
-DOI: [10.1016/j.intcom.2010.04.004](https://dx.doi.org/10.1016/j.intcom.2010.04.004)
-
-
-
-## Available Components
-
-- umux
-
-## Available Sequences
-
-None
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/virtual-chinrest.md b/versioned_docs/version-v2.4.1/libraries/virtual-chinrest.md
deleted file mode 100644
index ad0e5835c2..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/virtual-chinrest.md
+++ /dev/null
@@ -1,43 +0,0 @@
-
-# virtual-chinrest
-
-
-
-A library for visual calibration tasks including virtual chinrest (card size) and viewing distance calibration using blindspot tracking.
-
-## Reference
-
-:::note[Reference]
-Custom calibration library for visual perception studies
-:::
-
-DOI: [10.1038/s41598-019-57204-1](https://dx.doi.org/10.1038/s41598-019-57204-1)
-
-Link: [https://github.com/QishengLi/virtual_chinrest](https://github.com/QishengLi/virtual_chinrest)
-
-## Available Components
-
-- blindspot-distance
-- card-size
-
-## Available Sequences
-
-- full
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/libraries/vlat.md b/versioned_docs/version-v2.4.1/libraries/vlat.md
deleted file mode 100644
index 259a126056..0000000000
--- a/versioned_docs/version-v2.4.1/libraries/vlat.md
+++ /dev/null
@@ -1,94 +0,0 @@
-
-# vlat
-
-
-
-Visualization Literacy Assessment Test (VLAT) is developed to measure users' ability to read, understand, and use data visualizations to solve problems. The VLAT consists of 12 data visualizations and 53 multiple-choice questions. This library contains 53 components, each corresponding to a question of the VLAT. It also includes a sequence of all 53 components (the full VLAT).
-
-## Reference
-
-:::note[Reference]
-S. Lee, S.-H. Kim, and B. C. Kwon, "VLAT: Development of a Visualization Literacy Assessment Test," IEEE Transactions on Visualization and Computer Graphics, vol. 23, no. 1, pp. 551-560, Jan. 2017
-:::
-
-DOI: [10.1109/TVCG.2016.2598920](https://dx.doi.org/10.1109/TVCG.2016.2598920)
-
-
-
-## Available Components
-
-- area-extremum
-- area-range
-- area-trends
-- area-value
-- bar-comparisons
-- bar-extremum
-- bar-range
-- bar-value
-- bubble-anomalies
-- bubble-clusters
-- bubble-comparisons
-- bubble-extremum
-- bubble-range
-- bubble-trends
-- bubble-value
-- histogram-comparisons-derived
-- histogram-extremum-derived
-- histogram-value-derived
-- line-comparisons
-- line-extremum
-- line-range
-- line-trends
-- line-value
-- map-comparisons
-- map-extremum
-- map-value-approximate
-- pie-comparisons-relative
-- pie-extremum
-- pie-value-relative
-- scatterplot-anomalies
-- scatterplot-clusters
-- scatterplot-comparisons
-- scatterplot-correlations
-- scatterplot-extremum
-- scatterplot-range
-- scatterplot-value
-- stackarea-comparisons
-- stackarea-comparisons-relative
-- stackarea-extremum
-- stackarea-trends
-- stackarea-value-absolute
-- stackarea-value-relative
-- stackbar-comparisons-absolute
-- stackbar-comparisons-relative
-- stackbar-extremum
-- stackbar-value-absolute
-- stackbar-value-relative
-- stackbar100-comparisons-relative
-- stackbar100-extremum
-- stackbar100-value-relative
-- treemap-comparisons-relative
-- treemap-extremum-relative
-- treemap-hierarchical
-
-## Available Sequences
-
-- full
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/revisitpy-reference/classes.md b/versioned_docs/version-v2.4.1/revisitpy-reference/classes.md
deleted file mode 100644
index b70cd09934..0000000000
--- a/versioned_docs/version-v2.4.1/revisitpy-reference/classes.md
+++ /dev/null
@@ -1,784 +0,0 @@
-# Classes
-
-## `Component`
-
-The class that is instantiated when calling the `component` factory function. Used to define the components in the study configuration file.
-
-### **Attributes**:
-| Attribute | Type | Description | Default Value |
-|-------------|----------|-------------------------------------|---------------|
-| `component_name__` | `str` | Name of the component to be used as the key in the study config. | _None_ |
-| `base__` | `Optional[Component]` | The base component which is inherited by this component. | _None_ |
-| `meta` | `Optional[dict]` | A dictionary specifying metadata of the object. These attributes _are_ a part of the underlying component and will be shown when printing the components or the final configuration. These are used to attach arbitrary attributes to the component as well as for use with the `Sequence` class's `component` function. This attribute can also be set through the `Sequence` class's `permute` and `from_data` methods. | _None_ |
-
-### **Methods**:
-
-#### `responses(responses: List[Response]) -> self`
-
-Sets responses for the component
-
-**Parameters**:
-| Parameter | Type | Description | Default Value |
-|-------------|----------|-------------------------------------|---------------|
-| `responses` | `List[Response]` | Valid list of responses. | _None_ |
-
-**Returns**:
-- `self`: Returns self for method chaining.
-
-**Raises**:
-- `RevisitError`: If the list is not a valid list of responses, raises an exception.
-
-**Example**:
-```python
-my_response=rvt.response(
- id='my_response',
- type='dropdown',
- options=['Option 1', 'Option 2']
-)
-
-my_component = rvt.component(
- component_name__='my_component',
- type='markdown',
- path='assets/my-markdown-file.md'
-).responses([
- my_response
-])
-```
-
-#### `get_response(id: str) -> Response | None`
-
-
-Returns the response of the component with the given ID. If the Response does not exist, returns `None`.
-
-**Parameters**:
-| Parameter | Type | Description | Default Value |
-|-------------|----------|-------------------------------------|---------------|
-| `id` | `str` | ID of Response | _None_ |
-
-**Returns**:
-- `Response`: The response with the given ID.
-
-**Example**:
-```python
-the_response = my_component.get_response(id='the_response')
-
-if the_response is not None:
- print(the_response)
-```
-
-#### `edit_response(id: str, **kwargs: dict) -> self`
-
-Edits the Response in the Component with the given ID. This is done by creating a new copy of the existing Response.
-
-**Parameters**:
-| Parameter | Type | Description | Default Value |
-|-------------|----------|-------------------------------------|---------------|
-| `id` | `str` | ID of Response | _None_ |
-
-**Returns**:
-- `self`: Returns self for method chaining.
-
-**Example**:
-```python
-test_response = rvt.response(
- id='test_response',
- type='shortText',
- prompt='Original Prompt:',
- required=True
-)
-
-component_one = rvt.component(
- component_name__='component_one',
- type='questionnaire',
- response=[test_response]
-)
-
-component_two = rvt.component(
- component_name__='component_two',
- type='questionnaire',
- response=[test_response]
-).edit_response(id='test_response', prompt='New Prompt', required=False)
-
-print(component_one)
-'''
-Expected Output:
-{
- "response": [
- {
- "id": "test_response",
- "prompt": "Original Prompt:",
- "required": true,
- "type": "shortText"
- }
- ],
- "type": "questionnaire"
-}
-'''
-print(component_two)
-'''
-{
- "response": [
- {
- "id": "test_response",
- "prompt": "New Prompt",
- "required": false,
- "type": "shortText"
- }
- ],
- "type": "questionnaire"
-}
-'''
-```
-
-#### `get(param) -> Any`
-
-Retrieves the given parameter from the component. The param `'name'` can be used as shorthand for `'component_name__'`.
-
-**Parameters**:
-| Parameter | Type | Description | Default Value |
-|-------------|----------|-------------------------------------|---------------|
-| `param` | `str` | Parameter name to be retrieved | _None_ |
-
-
-#### `clone(component_name__) -> Component`
-
-
-Clones the component with the given new component name.
-
-**Parameters**:
-| Parameter | Type | Description | Default Value |
-|-------------|----------|-------------------------------------|---------------|
-| `component_name__` | `str` | New component name to assign to cloned component. | _None_ |
-
-
-**Returns**:
-- `self`: Returns self for method chaining.
-
-**Example**:
-```python
-test_response = rvt.response(
- id='test_response',
- type='shortText',
- prompt='Original Prompt:',
- required=True
-)
-
-component_one = rvt.component(
- component_name__='component_one',
- type='questionnaire',
- response=[test_response]
-)
-
-component_two = component_one.clone(component_name__='component_two').edit_response(id='test_response', prompt='New Prompt', required=False)
-
-print(component_one)
-'''
-Expected Output:
-{
- "response": [
- {
- "id": "test_response",
- "prompt": "Original Prompt:",
- "required": true,
- "type": "shortText"
- }
- ],
- "type": "questionnaire"
-}
-'''
-print(component_two)
-'''
-{
- "response": [
- {
- "id": "test_response",
- "prompt": "New Prompt",
- "required": false,
- "type": "shortText"
- }
- ],
- "type": "questionnaire"
-}
-'''
-```
-
-## `Response`
-
-This is the `Response` class. When calling the `response` factory function, an instantiation of this class is returned.
-
-### **Attributes**:
-_No attributes_
-
-
-### **Methods**:
-
-#### `get(param) -> Any`
-
-Retrieves the given parameter from the response. The param `'name'` can be used as an alternative for `'id'`.
-
-**Parameters**:
-| Parameter | Type | Description | Default Value |
-|-------------|----------|-------------------------------------|---------------|
-| `param` | `str` | Parameter name to be retrieved | _None_ |
-
-
-#### `set(**kwargs: dict) -> self`
-
-
-
-Sets the values of the response to the input dictionary. The `type` cannot be changed and would require creating a new response
-
-**Parameters**:
-| Parameter | Type | Description | Default Value |
-|-------------|----------|-------------------------------------|---------------|
-| `**kwargs` | `dict` | Dictionary containing valid values for the current response type. | _None_ |
-
-**Returns**:
-- `self`: Returns self for method chaining.
-
-**Raises**:
-- `RevisitError`: If the user attempts to change the `type` attribute of the response, an exception will be raised. Any invalid inputs for the instantiated response type will also raise an exception.
-
-**Examples**:
-```python
-response_one = rvt.response(
- id='r-1',
- type='shortText',
- required=False,
- location='belowStimulus',
- prompt=''
-)
-
-response_one.set(prompt='New Prompt')
-print(response_one)
-'''
-Expected Output
-{
- "id": "r-1",
- "location": "belowStimulus",
- "prompt": "New Prompt",
- "required": false,
- "type": "shortText"
-}
-'''
-
-response_one.set(type='longText')
-# Raises Exception: 'Cannot change type from shortText to longText'
-
-response_one.set(options=[1,2,3])
-
-```
-
-#### `clone() -> Response`
-
-
-Clones the response.
-
-**Parameters**:
-_No parameters_
-
-**Returns**:
-- `self`: Returns self for method chaining.
-
-**Examples**:
-```python
-import random
-question_1 = rvt.response(
- id='q-1',
- type='shortText',
- prompt='What is 4 - 2?',
- required=True,
- location='belowStimulus'
-)
-
-# Initialize a list with first question
-final_responses = [question_1]
-
-# Randomly generate different arithmetic questions by cloning original question.
-for i in range(2, 21):
- curr_response = question_1.clone().set(
- id=f'q-{i}',
- prompt=f'What is {random.randint(1, 10)} - {random.randint(1, 10)}'
- )
- final_responses.append(curr_response)
-
-component_one = rvt.component(
- component_name__='component_one',
- type='questionnaire',
- response=final_responses
-)
-
-print(component_one)
-'''
-Expected Output:
-{
- "response": [
- {
- "id": "q-1",
- "location": "belowStimulus",
- "prompt": "What is 4 - 2?",
- "required": true,
- "type": "shortText"
- },
- {
- "id": "q-2",
- "location": "belowStimulus",
- "prompt": "What is 10 - 4",
- "required": true,
- "type": "shortText"
- },
-
- ...
-
- {
- "id": "q-20",
- "location": "belowStimulus",
- "prompt": "What is 2 - 5",
- "required": true,
- "type": "shortText"
- }
- ],
- "type": "questionnaire"
-}
-'''
-```
-
-
-## `ComponentBlock`
-
-
-The `ComponentBlock` class (also referred to as a "Sequence"). A well-defined sequence simply contains an order and a set of components, with other optional properties. Just as in the nested structure of component blocks in the reVISit study configuration, `ComponentBlock` classes can be added together.
-
-A `ComponentBlock` automatically tracks all of its existing `Component` classes. When the `ComponentBlock` is added to the study configuration, all components will automatically be added to the high-level components element of the study config.
-
-### **Attributes**:
-_No attributes_
-
-
-### **Methods**:
-
-#### `__add__(other: Union[ComponentBlock, Component]) -> self:`
-
-
-
-Adds two `ComponentBlock` or `Component` to the input sequence. When adding two sequences together, the right sequence gets added as a `ComponentBlock` to the list of components of the left sequence. When the right object is an instance of the `Component` class, the component is added to the `ComponentBlock`'s list of components.
-
-
-**Parameters**:
-| Parameter | Type | Description | Default Value |
-|-------------|----------|-------------------------------------|---------------|
-| `other` | `Union[ComponentBlock, Component]` | Other item adding to left sequence. | _None_ |
-
-**Returns**:
-- `self`: Returns self for method chaining.
-
-**Raises**:
-- `NotImplemented`: If the right item is not a `Component` or `ComponentBlock`, raises a `NotImplemented` exception.
-
-**Examples**:
-```python
-first_sequence = rvt.sequence(
- order='fixed',
- components=[introduction]
-)
-second_sequence = rvt.sequence(
- order='random',
- components=[comp_one, comp_two]
-)
-
-first_sequence = first_sequence + second_sequence
-
-print(first_sequence)
-'''
-Expected Output:
-{
- "order": "fixed",
- "components" : [
- "introduction",
- {
- "order": "random"
- "components" : [
- "comp_one",
- "comp_two"
- ]
- }
- ]
-}
-'''
-post_study = rvt.component(
- component_name__='post-study',
- type='markdown',
- path='./post-study.md'
-)
-
-first_sequence = first_sequence + post_study
-print(first_sequence)
-'''
-Expected Output:
-{
- "order": "fixed",
- "components" : [
- "introduction",
- {
- "order": "random"
- "components" : [
- "comp_one",
- "comp_two"
- ]
- },
- "post-study"
- ]
-}
-'''
-```
-
-#### `get_component(name: str) -> Component:`
-
-
-
-Fetches the `Component` with the given component name from the sequence.
-
-
-**Parameters**:
-| Parameter | Type | Description | Default Value |
-|-------------|----------|-------------------------------------|---------------|
-| `name` | `str` | string matching the `component_name__` attribute of the desired `Component`. | _None_ |
-
-**Returns**:
-- `Component`: Returns desired `Component`. If no component with specified name is found, returns `None`.
-
-
-**Examples**:
-```python
-
-sequence = rvt.sequence(
- order='random',
- components=[comp_one, comp_two]
-)
-
-print(sequence.get_component(name='comp_two'))
-'''
-{
- "type": "markdown",
- "path": "my_markdown_file.md",
- "response": []
-}
-'''
-```
-
-#### `get_components() -> List[Component]`
-
-Fetches the list of all components in the sequence.
-
-**Parameters**:
-_None_
-
-**Returns**:
-- `List[Component]`: Returns list of all components in the sequence.
-
-
-**Examples**:
-```python
-
-sequence = rvt.sequence(
- order='random',
- components=[comp_one, comp_two]
-)
-
-# Fetches first component in component list.
-print(sequence.get_components()[0])
-'''
-{
- "type": "markdown",
- "path": "my_markdown_file.md",
- "response": []
-}
-'''
-```
-
-
-#### `component(component_function: Optional[Callable]) -> self`
-
-Maps each component in the current sequence to the result of the inputted `component_function`. This will maintain the entire structure of the sequence and will recursively call this function to replace every component.
-
-The `meta` attributes of components are passed in as arguments to the `component_function`. This makes it especially useful after using the `permute` or `from_data` methods since both add `meta` attributes to the components. If an exception is raised when calling the `component_function`, the original input component will be used in its stead. Additionally, the `component_function` can also take in the `component__` parameter which is the original component that is being transformed.
-
-#### **Examples**:
-
-**Simple component function to change the name**
-```python
-
-# Basic component function
-def my_component_function(id, value):
- return rvt.component(
- component_name__=f"{id}_{value}"
- type='website',
- path='path/to/html',
- )
-
-
-first_boring_component = rvt.component(type='questionnaire',meta={'id': 1, 'value': 2}, component_name__='bor-comp-1')
-second_boring_component = rvt.component(type='questionnaire',meta={'id': 2, 'value': 7}, component_name__='bor-comp-2')
-
-sequence = rvt.sequence(order='fixed', components=[first_boring_component, second_boring_component])
-
-print(sequence)
-'''
-{
- 'order':'fixed',
- 'components':[
- 'bor-comp-1',
- 'bor-comp-2'
- ]
-}
-'''
-
-sequence.component(my_component_function)
-
-print(sequence)
-'''
-{
- 'order':'fixed',
- 'components':[
- '1_2',
- '2_7'
- ]
-}
-'''
-```
-
-**Passing in Original Components**
-
-In the example below, we'll use the original component to determine if we want to append the `meta` as parameters.
-
-```python
-def my_component_function(id, value, component__):
- if component__.get('type') === 'website':
- return rvt.component(
- component_name__=f"website_{id}_{value}"
- type='website',
- path='path/to/html',
- parameters={
- 'id':id,
- 'value':value
- }
- )
-
- return rvt.component(
- component_name__=f'questionnaire_{id}_{value}'
- type='questionnaire',
- )
-
-first_boring_component = rvt.component(type='questionnaire',meta={'id': 1, 'value': 2}, component_name__='bor-comp-1')
-second_boring_component = rvt.component(type='website',meta={'id': 2, 'value': 7}, component_name__='bor-comp-2')
-
-sequence = rvt.sequence(
- order='fixed',
- components=[first_boring_component, second_boring_component]
-).component(my_component_function)
-
-print(sequence)
-
-'''
-{
- 'order':'fixed',
- 'components':[
- 'questionnaire_1_2',
- 'website_2_7'
- ]
-}
-'''
-```
-
-:::info
-If you'd like to have your `component_function` always take in all `meta` entries and the original component, you can define your component function using the `kwargs` keyword like `def my_component_function(**kwargs)`. Then, to access each entry, you can use `kwargs.get('my_metadata_key')` and `kwargs.get('component__')`.
-:::
-
-You can find more examples of using the `component` method in the [Scatter JND Example](../../revisitpy/examples/example_jnd_study) where we first construct a sequence by permuting over multiple factors, then using the `component` method to alter the components based on the `meta` that is applied during th permutation method.
-
-
-#### `permute(factors: List[dict], order: 'fixed' | 'latinSquare' | 'random', numSamples: Optional[int]) -> self`
-
-
-Permutes the existing components of the sequence over the given `factors`. The permute method can be chained to complex study sequences. By default, the factors are attached as `meta` attributes to each component created.
-
-**Parameters**:
-| Parameter | Type | Description | Default Value |
-|-------------|----------|-------------------------------------|---------------|
-| `factors` | `List[dict]` | A list of single-key dictionaries to permute over. | _None_ |
-| `order` | `'fixed' \| 'latinSquare' \| 'random' ` |The order to assign to the current permuted component block. | _None_ |
-| `numSamples` | `Optional[int]` | The `numSamples` value to assign to the current permuted block. | _None_ |
-
-**Returns**:
-- `self`: Returns self for method chaining.
-
-#### **Examples**:
-
-**Simple Permutation**
-```python
-
-comp_one = rvt.component(component_name__='my-base', type='markdown', path='./my-markdown.md')
-
-sequence = rvt.component(order='fixed',components=[comp_one])
-
-sequence.permute(
- factors=[{'condition':'A'}, {'condition':'B'}],
- order='random'
-)
-
-print(sequence)
-'''
-Expected Output:
-{
- "order": "random", <--- Since there was only one component in the original sequence, order gets overwritten.
- "components": [
- "my-base_condition:A",
- "my-base_condition:B" <--- Note that the default behavior appends the factors to the name
- ]
-}
-
-The two components generated are inherently identical, except with different meta attributes.
-These meta attributes are not outputed into the final JSON study config or seen when printing out
-the individual components.
-'''
-
-sequence.permute(
- factors=[{'type':'1'}, {'type': '2'}]
- order='fixed',
- numSamples=1
-)
-
-print(sequence)
-'''
-Expected Output:
-{
- "order": "random",
- "components": [
- {
- "order": "fixed", <--- New order gets added to inner most component blocks.
- "components": [
- "my-base_condition:A_type:1",
- "my-base_condition:A_type:2",
- ],
- "numSamples": 1
- },
- {
- "order": "fixed",
- "components": [
- "my-base_condition:B_type:1",
- "my-base_condition:B_type:2",
- ],
- "numSamples": 1
- },
- ]
-
-}
-'''
-```
-
-**Using the `component_function` in the `component` method**
-
-```python
-# Defining component function.
-# Takes in kwargs to prevent conflicts with any existing metadata.
-def my_comp_function(**kwargs):
- condition = kwargs.get('condition')
- type_ = kwargs.get('type')
- # If condition and type_ are both defined, return new component.
- if condition is not None and type_ is not None:
- rvt.component(
- type='website'
- component_name__=f"{condition}__{type_}"
- parameters={
- 'condition': condition,
- 'type': type_
- },
- response=[
- rvt.response(
- id=f"response_{condition}_{type_}",
- type="longText",
- prompt=f"How do you feel about condition {condition} and type {type_}?",
- required=True
- )
- ]
- )
-
- # If not both defined, return a blank component with "BAD-COMPONENT" name.
- # Useful for debugging
- return rvt.component(type='questionnaire',component_name__="BAD-COMPONENT")
-
-sequence = rvt.sequence(order='fixed').permute(
- factors=[{'condition':'A'}, {'condition':'B'}],
- order='random'
-).permute(
- factors=[{'type':'1'}, {'type': '2'}]
- order='fixed',
- numSamples=1,
-).component(component_function) # <-- Uses component method to map each component to the result of the component_function
-
-print(sequence)
-'''
-Expected Output:
-{
- "order": "random",
- "components": [
- {
- "order": "fixed", <--- New order gets added to inner most component blocks.
- "components": [
- "A__1",
- "A__2",
- ],
- "numSamples": 1
- },
- {
- "order": "fixed",
- "components": [
- "B__1",
- "B__2"
- ],
- "numSamples": 1
- },
- ]
-
-}
-'''
-```
-
-
-
-#### `from_data(data_list) -> self`
-
-The `from_data` method iterates over a list of `DataRows` and appends the data to the `meta` attribute of the components in the sequence. You can generate a list of `DataRows` by using the [data function](./functions.md#datafile_path) to parse a CSV file.
-
-### **Example**:
-
-In the below example, we create the study data using the `data` method, then create a sequence from this data using the `from_data` method. Each component shown in the new sequence will have the respective data added to their `meta` attribute. From here, you can use the `component` method of the `Sequence` class to transform each component based on their respective `meta` attributes that you applied with the `from_data` method.
-
-```python
-
-'''
-'my_csv_file.csv' contents
-
-id | value_1 | value_2
----|---------|--------
- 1 | 0.3 | 3
- 2 | 0.1 | 4
- 3 | 1.2 | 1
-'''
-
-study_data = rvt.data('path/to/my_csv_file.csv')
-
-sequence = rvt.sequence(order='fixed').from_data(study_data)
-
-print(sequence)
-'''
-{
- "order": "fixed",
- "components": [
- 'id:1__value_1:0.3__value_2:3',
- 'id:2__value_1:0.1__value_2:4',
- 'id:3__value_1:1.2__value_2:1',
- ]
-}
-'''
-```
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/revisitpy-reference/functions.md b/versioned_docs/version-v2.4.1/revisitpy-reference/functions.md
deleted file mode 100644
index 098c3c99bf..0000000000
--- a/versioned_docs/version-v2.4.1/revisitpy-reference/functions.md
+++ /dev/null
@@ -1,210 +0,0 @@
-# Functions
-
-### `component(component_name__, base__, **kwargs) -> Component`
-
-Instantiates a Component class with the given input parameters.
-
-### **Parameters**:
-| Parameter | Type | Description | Default Value |
-|-----------|--------|---------------------------------|---------------|
-| `component_name__` | `str` | Names the component for use in the final configuration file. | _None_ |
-| `base__` | `Optional[component]` | When a base component is passed, all properties of the base are inherited by the component. Any other specified property during input will override base properties. | _None_ |
-| `**kwargs` | `dict` | The component function requires any property that the component already requires, such as "type". Refer to the configuration documentation for required properties. | _None_ |
-
-### **Returns**:
-- `Component`: Returns an instantiation of the Component class.
-
-### **Raises**:
-- `RevisitError`: If the required properties are not specified, and exception will be raised.
-
-### **Example**:
-```python
-import revisit as rvt
-
-# Initializing a markdown component with an empty response list.
-my_component = rvt.component(
- component_name__='my-component',
- response=[],
- type='markdown',
- path='./assets/my-markdown-file.md'
-)
-
-# Instantiating a component with the base as "my_component".
-my_other_component = rvt.component(
- component_name__='my-other-component',
- base__=my_component,
- path='./assets/my-other-markdown-file.md'
-)
-```
-
-
-### `response(**kwargs) -> Response`
-
-
-Instantiates a Response class with the given input parameters.
-
-### **Parameters**:
-| Parameter | Type | Description | Default Value |
-|-----------|--------|---------------------------------|---------------|
-| `**kwargs` | `dict` | The component function requires any property that the component already requires, such as "type". Refer to the configuration documentation for required properties. | _None_ |
-
-### **Returns**:
-- `Response`: Returns an instantiation of the Response class.
-
-### **Raises**:
-- `RevisitError`: If the required properties are not specified, and exception will be raised.
-
-### **Example**:
-```python
-import revisit as rvt
-
-# Initializing a matrix radio response
-my_response = rvt.response(
- type='matrix-radio',
- answerOptions='likely5',
- questionOptions=['Question 1', 'Question 2', 'Question 3'],
- required=True,
- location='sidebar'
-)
-```
-
-### `studyMetadata(**kwargs) -> StudyMetadata`
-
-Instantiates a StudyMetadata class with the given parameters.
-
-### **Parameters**:
-| Parameter | Type | Description | Default Value |
-|-----------|--------|---------------------------------|---------------|
-| `**kwargs` | `dict` | Required properties for the StudyMetadata | _None_ |
-
-### **Returns**:
-- `Response`: Returns an instantiation of the Response class.
-
-### **Raises**:
-- `RevisitError`: If the required properties are not specified, and exception will be raised.
-
-### **Example**:
-```python
-import revisit as rvt
-
-# Initializing a matrix radio response
-my_response = rvt.response(
- type='matrix-radio',
- answerOptions='likely5',
- questionOptions=['Question 1', 'Question 2', 'Question 3'],
- required=True,
- location='sidebar'
-)
-```
-
-### `uiConfig(**kwargs) -> UIConfig`
-
-Instantiates a UIConfig class with the given parameters.
-
-### **Parameters**:
-| Parameter | Type | Description | Default Value |
-|-----------|--------|---------------------------------|---------------|
-| `**kwargs` | `dict` | The component function requires any property that the component already requires, such as "type". Refer to the configuration documentation for required properties. | _None_ |
-
-### **Returns**:
-- `Response`: Returns an instantiation of the Response class.
-
-### **Raises**:
-- `RevisitError`: If the required properties are not specified, and exception will be raised.
-
-### **Example**:
-```python
-import revisit as rvt
-
-# Initializing a matrix radio response
-my_response = rvt.response(
- type='matrix-radio',
- answerOptions='likely5',
- questionOptions=['Question 1', 'Question 2', 'Question 3'],
- required=True,
- location='sidebar'
-)
-```
-
-### `studyConfig(studyMetadata, uiConfig, sequence, schema, components) -> StudyConfig`
-
-Instantiates a the final `StudyConfig` based on the `UIConfig`, `StudyMetadata`, `Sequence`, and `Components` input. Note that the components list is completely optional: using the `studyConfig` factory function automatically populates all components based on their presence in the sequence.
-
-### **Parameters**:
-| Parameter | Type | Description | Default Value |
-|-----------|--------|---------------------------------|---------------|
-| `studyMetadata` | `StudyMetadata` | An instance of the `StudyMetadata` class | _None_ |
-| `uiConfig` | `UIConfig` | An instance of the `UIConfig` class | _None_ |
-| `sequence` | `ComponentBlock` | The top level member of your sequence. | _None_ |
-| `components` | `Optional[List[Component]]` | The list of `Component`s to be added to the config. This is automatically populated based on the inputted sequence | `[]` |
-| `schema` | `str` |The valid `$schema` value for the config. You can always find the most recent schema value in the public repository of our main study repository, such as [here](https://github.com/revisit-studies/study/blob/main/public/demo-html/config.json) | _None_ |
-
-### **Returns**:
-- `StudyConfig`: Returns an instantiation of the StudyConfig class.
-
-### **Raises**:
-- `RevisitError`: If the required properties are not specified, and exception will be raised.
-
-### **Example**:
-
-```python
-ui_config = rvt.uiConfig(...)
-study_metadata = rvt.studyMetadata(...)
-comp_one = rvt.component(...)
-comp_two = rvt.component(...)
-sequence = rvt.sequence(order='fixed',components=[comp_one, comp_two])
-
-study = rvt.studyConfig(
- schema='https://raw.githubusercontent.com/revisit-studies/study/v2.0.0-rc5/src/parser/StudyConfigSchema.json',
- studyMetadata=study_metadata,
- uiConfig=ui_config,
- sequence=sequence # <-- Do not need to add components list separately if they are already in the sequence.
-)
-```
-
-
-### `data(file_path)`
-
-Parses a CSV file with the given `file_path` and returns a list of DataRows. Output can be passed into the `from_data` method of the `sequence` class to generate components based on the CSV data.
-
-### **Parameters**:
-| Parameter | Type | Description | Default Value |
-|-----------|--------|---------------------------------|---------------|
-| `file_path` | `str` | Path to the CSV file | _None_ |
-
-### **Returns**:
-- `List[DataRow]`: Returns a list of dataclasses called `DataRow`.
-
-
-### **Example**:
-
-In the below example, we create the study data using the `data` method, then create a sequence from this data using the `from_data` method. Each component shown in the new sequence will have the respective data added to their `meta` attribute. From here, you can use the `component` method of the `Sequence` class to transform each component based on their respective `meta` attributes that you applied with `from_data` method.
-
-```python
-
-'''
-'my_csv_file.csv' contents
-
-id | value_1 | value_2
----|---------|--------
- 1 | 0.3 | 3
- 2 | 0.1 | 4
- 3 | 1.2 | 1
-'''
-
-study_data = rvt.data('path/to/my_csv_file.csv')
-
-sequence = rvt.sequence(order='fixed').from_data(study_data)
-
-print(sequence)
-'''
-{
- "order": "fixed",
- "components": [
- 'id:1__value_1:0.3__value_2:3',
- 'id:2__value_1:0.1__value_2:4',
- 'id:3__value_1:1.2__value_2:1',
- ]
-}
-'''
-```
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/revisitpy/examples/example_expanding_html_study.md b/versioned_docs/version-v2.4.1/revisitpy/examples/example_expanding_html_study.md
deleted file mode 100644
index aadedcfdb5..0000000000
--- a/versioned_docs/version-v2.4.1/revisitpy/examples/example_expanding_html_study.md
+++ /dev/null
@@ -1,275 +0,0 @@
-# Enhancing The Simple HTML Study
-
-In the previous example, we went over creating the configuration file shown [here](https://github.com/revisit-studies/study/blob/main/public/demo-html-input/config.json). While that example is still a valid use case for the `revisitpy` package, this may be a configuration that is simpler to write in standard JSON. In this example, we'll go over a use case which more readily requires the `revisitpy` package.
-
-Instead of defining the data for each bar chart directly in the python notebook, suppose we have a CSV file which contains the data for each bar chart. Depending on your specific needs, you may be generating data in R or some other separate Python environment. In these cases, it is extremely useful to have a seamless way to convert raw data into well-defined reVISit components.
-
-Rather than copy this data over into our Jupyter notebook, we will use the built-in `data` function to first import the CSV file and then generate components from the data set using the `Sequence` class's `from_data` method.
-
-## Using the Data Parser and `from_data` method
-
-We load in the data using the built-in `data` function. This will generate a list of `DataRows` classes. We can then pass this directly into the `from_data` method of the sequence we create.
-
-
-```python
-import revisitpy as rvt
-
-# Import the data using the built-in data parser.
-study_data = rvt.data('./assets/data.csv')
-
-# Generate a single component for each element of the dataset.
-data_sequence = rvt.sequence(order='random').from_data(study_data)
-
-print('------- Sequence --------')
-print(data_sequence)
-
-print('------- Individual Component -------')
-print(data_sequence.get_components()[0])
-```
-**Output:**
-```output
-------- Sequence --------
-{
- "components": [
- "place-holder-component_id:1_b1:0.32_b2:0.01_b3:1.2_b4:1.3_b5:0.82_b6:0.4_b7:0.3",
- "place-holder-component_id:2_b1:1.2_b2:1.2_b3:1.2_b4:1.3_b5:0.82_b6:0.4_b7:0.3",
- "place-holder-component_id:3_b1:0.6_b2:1.1_b3:0.7_b4:0.74_b5:1.3_b6:0.1_b7:0.9",
- "place-holder-component_id:4_b1:1.3_b2:1.1_b3:1.3_b4:0.64_b5:0.31_b6:0.2_b7:0.8",
- "place-holder-component_id:5_b1:0.1_b2:0.1_b3:0.3_b4:0.4_b5:0.5_b6:1.1_b7:0.2",
- "place-holder-component_id:6_b1:0.3_b2:1.1_b3:0.65_b4:0.77_b5:0.4_b6:1.3_b7:1.1"
- ],
- "order": "random"
-}
-------- Individual Component -------
-{
- "meta": {
- "id": 1,
- "b1": 0.32,
- "b2": 0.01,
- "b3": 1.2,
- "b4": 1.3,
- "b5": 0.82,
- "b6": 0.4,
- "b7": 0.3
- },
- "response": [],
- "type": "questionnaire"
-}
-```
-## Transforming The Components
-
-Notice that each component in this sequence we created is not the website component that we'd like. Instead, these are "filler components". The idea of the `from_data` method (or the similarly designed `permute` method) is to generate the _structure_ of the sequence. This method applies each of the data rows to the `meta` attribute of the components. These attributes will be printed out when inspecting the JSON and will appear in the final config. However, in general, the `meta` attribute does not have any tangible effect on the resulting component. This `meta` attribute is used when transforming these filler components into our desired components. Below we inspect the `meta` attribute of the first component in the sequence.
-
-
-```python
-print(data_sequence.get_components()[0].get('meta'))
-```
-**Output:**
-```output
-{'id': 1, 'b1': 0.32, 'b2': 0.01, 'b3': 1.2, 'b4': 1.3, 'b5': 0.82, 'b6': 0.4, 'b7': 0.3}
-```
-Now that we've verified that the metadata attributes are correctly applied to the components, lets transform these filler components to the components we'd like. We start by creating a "component function"
-
-
-```python
-# Define the response and the base component.
-
-response_one = rvt.response(
- id='barChart',
- prompt='Your selected answer:',
- location='belowStimulus',
- type='reactive',
- required=True
-)
-
-base_component = rvt.component(
- component_name__='bar-chart',
- type='website',
- response=[response_one],
- path="./assets/bar-chart-interaction.html",
- instructionLocation='aboveStimulus'
-)
-
-def bar_chart_component_function(id, b1, b2, b3, b4, b5, b6, b7):
- # Toggle between 'largest' and 'smallest' depending on
- # if the original ID is an odd or even number.
- largest_smallest_string = 'smallest' if id % 2 == 0 else 'largest'
-
- comp = rvt.component(
- base__=base_component,
- component_name__=f'bar-chart-{id}',
- description=f"A trial for the user to click the {largest_smallest_string} bar",
- instruction=f'Click on the {largest_smallest_string} bar',
- parameters={
- "barData": [b1, b2, b3, b4, b5, b6, b7]
- }
- )
-
- # Always return a component in our component functions.
- return comp
-```
-
-The component function defined above has the headers of the CSV file as the parameters to the function. When we use this component function, the `meta` attributes of each filler component will be passed in as arguments to this function to return the resulting component that overwrites the filler component.
-
-Optionally, we could define this component function with the single parameter `**kwargs`. This will ensure that any argument in the metadata attributes can be passed into the function. However, this would then require you to use syntax like `kwargs.get('b1')` instead of just `b1`. You should consider these options when designing your component function based on your specific needs.
-
-If the component function fails to create the component, the operation will not totally fail. Instead, the original filler component will remain in its place.
-
-Now that we have the function defined, the transformation is simple:
-
-
-```python
-data_sequence.component(bar_chart_component_function)
-
-print(data_sequence)
-print(data_sequence.get_components()[0])
-```
-**Output:**
-```output
-{
- "components": [
- "bar-chart-6",
- "bar-chart-5",
- "bar-chart-4",
- "bar-chart-3",
- "bar-chart-2",
- "bar-chart-1"
- ],
- "order": "random"
-}
-{
- "description": "A trial for the user to click the smallest bar",
- "instruction": "Click on the smallest bar",
- "instructionLocation": "aboveStimulus",
- "parameters": {
- "barData": [
- 0.3,
- 1.1,
- 0.65,
- 0.77,
- 0.4,
- 1.3,
- 1.1
- ]
- },
- "path": "./assets/bar-chart-interaction.html",
- "response": [
- {
- "id": "barChart",
- "location": "belowStimulus",
- "prompt": "Your selected answer:",
- "required": true,
- "type": "reactive"
- }
- ],
- "type": "website"
-}
-```
-## Creating the Final Sequence
-
-Now that we have the new sequence we created, let's redefine our study config and the inputted sequence.
-
-
-```python
-
-introduction = rvt.component(
- component_name__='introduction',
- type='markdown',
- path='./assets/introduction.md' # <--- Relative path to asset from this notebook
-)
-
-sequence = rvt.sequence(order='fixed', components=[introduction]) + data_sequence
-
-print(sequence)
-
-study_metadata = rvt.studyMetadata(
- title='Passing Data From reVISit to HTML and back',
- version='pilot',
- authors=[
- 'The reVISit Team',
- 'reVISitPy'
- ],
- date='2025-01-20',
- description="A demo of how to pass visualization data from reVISit to HTML and send user answers from HTML back to the reVISit.",
- organizations=[
- "University of Utah",
- "WPI"
- ]
-)
-
-ui_config = rvt.uiConfig(
- contactEmail="contact@revisit.dev",
- helpTextPath="./assets/help.md",
- logoPath="./assets/revisitLogoSquare.svg",
- withProgressBar=True,
- autoDownloadStudy=False,
- autoDownloadTime=5000,
- withSidebar=False
-)
-
-study = rvt.studyConfig(
- schema='https://raw.githubusercontent.com/revisit-studies/study/v2.0.0/src/parser/StudyConfigSchema.json',
- uiConfig=ui_config,
- studyMetadata=study_metadata,
- sequence=sequence
-)
-```
-**Output:**
-```output
-{
- "components": [
- "introduction",
- {
- "components": [
- "bar-chart-6",
- "bar-chart-5",
- "bar-chart-4",
- "bar-chart-3",
- "bar-chart-2",
- "bar-chart-1"
- ],
- "order": "random"
- }
- ],
- "order": "fixed"
-}
-```
-Finally, lets preview this in our widget.
-
-
-```python
-import revisitpy_server as rs
-
-process = rs.serve()
-
-w = rvt.widget(study, server=True)
-
-# In your own Jupyter notebook, calling `w` will now display the widget in a fully interactive manner.
-# w
-```
-**Output:**
-```output
-Server is running in the background at http://localhost:8080
-Copying file from ./assets/introduction.md to /Users/bbollen23/revisit-py-examples/.venv/lib/python3.12/site-packages/revisitpy_server/static/__revisit-widget/assets/introduction.md
-Copying file from ./assets/bar-chart-interaction.html to /Users/bbollen23/revisit-py-examples/.venv/lib/python3.12/site-packages/revisitpy_server/static/__revisit-widget/assets/bar-chart-interaction.html
-Copying file from ./assets/bar-chart-interaction.html to /Users/bbollen23/revisit-py-examples/.venv/lib/python3.12/site-packages/revisitpy_server/static/__revisit-widget/assets/bar-chart-interaction.html
-Copying file from ./assets/bar-chart-interaction.html to /Users/bbollen23/revisit-py-examples/.venv/lib/python3.12/site-packages/revisitpy_server/static/__revisit-widget/assets/bar-chart-interaction.html
-Copying file from ./assets/bar-chart-interaction.html to /Users/bbollen23/revisit-py-examples/.venv/lib/python3.12/site-packages/revisitpy_server/static/__revisit-widget/assets/bar-chart-interaction.html
-Copying file from ./assets/bar-chart-interaction.html to /Users/bbollen23/revisit-py-examples/.venv/lib/python3.12/site-packages/revisitpy_server/static/__revisit-widget/assets/bar-chart-interaction.html
-Copying file from ./assets/bar-chart-interaction.html to /Users/bbollen23/revisit-py-examples/.venv/lib/python3.12/site-packages/revisitpy_server/static/__revisit-widget/assets/bar-chart-interaction.html
-Copying file from ./assets/help.md to /Users/bbollen23/revisit-py-examples/.venv/lib/python3.12/site-packages/revisitpy_server/static/__revisit-widget/assets/help.md
-Copying file from ./assets/revisitLogoSquare.svg to /Users/bbollen23/revisit-py-examples/.venv/lib/python3.12/site-packages/revisitpy_server/static/__revisit-widget/assets/revisitLogoSquare.svg
-```
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/revisitpy/examples/example_jnd_study.md b/versioned_docs/version-v2.4.1/revisitpy/examples/example_jnd_study.md
deleted file mode 100644
index bbf860d9a6..0000000000
--- a/versioned_docs/version-v2.4.1/revisitpy/examples/example_jnd_study.md
+++ /dev/null
@@ -1,450 +0,0 @@
-# Correlation Visualization JND Example Study
-
-In this example, we'll create a full two-alternative forced choice (2AFC) study for visualizations of correlated data (from [1]), using vega components. We'll use numpy and scipy to generate a dataset, pandas to create a well-structured data frame, and the `revisitpy` package to tie it all together.
-
-You'll see that we have a section which uses the `revisitpy` Widget. This widget is a fully interactive Jupyter notebook widget which allows us to preview the created study directly in the notebook. You'll notice that we also utilize the `revisitpy-server` package. This is to simplify the process of viewing our widget. Specifically, it removes the requirement of having a version of the reVISit repository running locally on your computer.
-
-[1] Harrison, Lane, Fumeng Yang, Steven Franconeri, and Remco Chang. "Ranking visualizations of correlation using weber's law." IEEE transactions on visualization and computer graphics 20, no. 12 (2014): 1943-1952.
-
-We'll start by defining the basic structure of the study:
-
-
-```python
-
-import revisitpy as rvt
-
-# Meta Data
-study_metadata = rvt.studyMetadata(
- authors=["Brian Bollen"],
- organizations=["Visualization Design Lab"],
- title='Correlation Judgment Study',
- description='',
- date='2025-01-13',
- version='1.0'
-)
-
-
-# UI Config
-ui_config = rvt.uiConfig(
- contactEmail="briancbollen@gmail.com",
- logoPath="./assets/revisitLogoSquare.svg",
- withSidebar=True,
- withProgressBar=False,
- nextOnEnter=True
-)
-
-# Introduction
-introduction = rvt.component(type='markdown', path='./assets/introduction.md', component_name__= 'introduction')
-
-# Snippet of the introduction component.
-print(introduction)
-
-```
-**Output:**
-```output
-{
- "path": "./assets/introduction.md",
- "response": [],
- "type": "markdown"
-}
-```
-## Generating Correlation Data
-
-We now want to generate the datasets that will go into our vega charts. We don't yet have to worry about rendering these, we'll just define the functions to generate the data.
-
-
-```python
-import numpy as np
-from scipy.special import erfinv, erf
-
-def generate_correlated_data_uniform(correlation, num_points, seed=None):
- """
- Generate a dataset with two variables having the specified correlation,
- with values bounded between 0 and 1.
- Parameters:
- correlation (float): Desired correlation coefficient (-1 to 1).
- num_points (int): Number of data points to generate.
- seed (int, optional): Random seed for reproducibility.
- Returns:
- np.ndarray: A 2D array of shape (num_points, 2), where each column is a variable.
- """
- if not -1 <= correlation <= 1:
- raise ValueError("Correlation must be between -1 and 1.")
- if seed is not None:
- np.random.seed(seed)
- # Generate two independent uniform random variables between 0 and 1
- x = np.random.rand(num_points)
- z = np.random.rand(num_points)
- # Apply inverse transform sampling to convert uniform to normal
- x_normal = np.sqrt(2) * erfinv(2 * x - 1) # Inverse CDF of normal distribution
- z_normal = np.sqrt(2) * erfinv(2 * z - 1)
- # Combine them using the desired correlation
- y_normal = correlation * x_normal + np.sqrt(1 - correlation**2) * z_normal
- # Transform back to uniform distribution using normal CDF
- x_uniform = 0.5 * (1 + erf(x_normal / np.sqrt(2)))
- y_uniform = 0.5 * (1 + erf(y_normal / np.sqrt(2)))
- # Stack into a 2D array
- data = np.column_stack((x_uniform, y_uniform))
- return data
-
-# Example of dataset
-print(generate_correlated_data_uniform(0.6, 10, seed=42))
-```
-**Output:**
-```output
-[[0.37454012 0.03397256]
- [0.95071431 0.99369625]
- [0.73199394 0.87335673]
- [0.59865848 0.31251313]
- [0.15601864 0.09121347]
- [0.15599452 0.09198872]
- [0.05808361 0.08811887]
- [0.86617615 0.76262552]
- [0.60111501 0.50662253]
- [0.70807258 0.45573666]]
-```
-## Vega ScatterPlots and Parallel Coordinate Plots
-
-For this study, we need to generate pairs of scatterplots and pairs of parallel coordinate plots. We will create two generalized functions which take in two data frames whose columns are 'X' and 'Y' and whose entries are tuples, indicating the coordinates. These functions will each return a vega-altair chart that will be added as components.
-
-
-```python
-import pandas as pd
-import altair as alt
-
-# Enable png output to save the image.
-alt.renderers.enable("png")
-
-def create_parallel_plot(data1, data2):
- data1_melted = data1.reset_index().melt(id_vars='index', var_name='Axis', value_name='Value')
- data2_melted = data2.reset_index().melt(id_vars='index', var_name='Axis', value_name='Value')
-
- # Create the parallel coordinates chart
- parallel1 = alt.Chart(data1_melted).mark_line(stroke='grey', strokeWidth=1).encode(
- x=alt.X('Axis:O', axis=alt.Axis(labels=False, ticks=False, grid=False, domain=False, title=None, labelPadding=0)),
- y=alt.Y('Value:Q', axis=alt.Axis(labels=False, ticks=False, grid=False, domain=False, title=None)), # Values on the vertical axis
- detail='index:N', # Ensure each line corresponds to a single data row
- ).properties(
- title="", width=400, height=300
- )
-
- parallel2 = alt.Chart(data2_melted).mark_line(stroke='grey', strokeWidth=1).encode(
- x=alt.X('Axis:O', axis=alt.Axis(labels=False, ticks=False, grid=False, domain=False, title=None,)),
- y=alt.Y('Value:Q', axis=alt.Axis(labels=False, ticks=False, grid=False, domain=False, title=None)), # Values on the vertical axis
- detail='index:N', # Ensure each line corresponds to a single data row
- ).properties(
- title="", width=400, height=300
- )
-
- axis_lines = alt.Chart(pd.DataFrame(
- {'Axis': ['X', 'Y'], 'y_start': [0, 0], 'y_end': [1, 1]}
- )).mark_rule(stroke='black', strokeWidth=1).encode(
- x=alt.X('Axis:O'), y=alt.Y('y_start:Q'), y2='y_end:Q'
- )
-
- parallel1 = parallel1 + axis_lines
- parallel2 = parallel2 + axis_lines
-
- chart = alt.hconcat(
- parallel1, parallel2
- ).configure_view(
- strokeWidth=0, continuousWidth=400, continuousHeight=300, step=50
- ).configure_concat(spacing=0)
-
- return chart
-
-def create_scatter_plot(data1, data2):
- # Create Scatter plot 1
- scatter1 = alt.Chart(data1).mark_point(fill='black', stroke='black').encode(
- x=alt.X('X:Q', axis=alt.Axis( labels=False, ticks=False, grid=False, domain=True, title=None)),
- y=alt.Y('Y:Q', axis=alt.Axis( labels=False, ticks=False, grid=False, domain=True, title=None))
- ).properties(
- title='', width=300, height=300
- )
-
- # Create Scatter plot two
- scatter2 = alt.Chart(data2).mark_point(fill='black', stroke='black').encode(
- x=alt.X('X:Q', axis=alt.Axis( labels=False, ticks=False, grid=False, domain=True, title=None)),
- y=alt.Y('Y:Q', axis=alt.Axis( labels=False, ticks=False, grid=False, domain=True, title=None))
- ).properties(
- title='', width=300, height=300
- )
-
- chart = alt.hconcat(
- scatter1, scatter2
- ).configure_view(
- strokeWidth=0, continuousWidth=300, continuousHeight=300, step=10
- ).configure_concat(
- spacing=100,
- )
-
- return chart
-
-# Make some fake test data
-test_data_1 = pd.DataFrame({'X':[0.1,0.3,0.6], 'Y':[0.3,0.3,0.4]})
-test_data_2 = pd.DataFrame({'X':[0.1,0.1,0.3], 'Y':[0.4,0.9,0.2]})
-
-# Display chart
-# chart = create_parallel_plot(test_data_1,test_data_2)
-chart = create_scatter_plot(test_data_1,test_data_2)
-chart
-```
-
-
-
-
-
-
-
-
-
-
-# Generate Vega Spec to combine Generated Data and Plots
-
-Now that we have our functions to create the individual chart, we want a function that returns the correct vega spec when given the number of points, the correlation values, and the visualization type ('scatterPlot' or 'parallelPlot'). We'll use the number of points and the pair of correlation values to generate the dataset. Using the visualization type, we'll either return the scatter plot of this data or the parallel coordinates plot. Hover, instead of returning the vega-altair chart, we instead convert the chart to its vega-lite specification, then convert that into the true vega specification.
-
-
-
-```python
-import random
-import pandas as pd
-import altair as alt
-import vl_convert as vlc
-
-
-
-def create_vega_chart(visType, numPoints, corrValues):
- random.shuffle(corrValues)
- # Convert NumPy array to a DataFrame
- data1 = pd.DataFrame(
- generate_correlated_data_uniform(corrValues[0], numPoints, seed=42),
- columns=['X', 'Y']
- )
- data2 = pd.DataFrame(
- generate_correlated_data_uniform(corrValues[1], numPoints, seed=42),
- columns=['X', 'Y']
- )
-
-
- if visType == 'scatterPlot':
- chart = create_scatter_plot(data1, data2)
- else:
- chart = create_parallel_plot(data1, data2)
-
- vega_lite_spec = chart.to_json()
- vega_spec = vlc.vegalite_to_vega(vega_lite_spec, vl_version="5.20")
- return vega_spec
-
-my_vega_spec = create_vega_chart('parallelPlot', 20, [0.3,0.9])
-
-# We can print the test vega specification above to inspect its contents.
-
-# print(my_vega_spec)
-
-```
-
-## Creating The Component Function & Interaction Signals for ReVISit Trials
-
-The `component_function` is used to transform every component in a given sequence to any new component. If we have a sequence that is the correct _structure_, then we call the `component()` method on that sequence and pass in the desired `component_function`. Any `meta` attributes in the original components are passed in as arguments to the `component_function`.
-
-We'll create a component function which takes in the visualization type, the correlation values, and the number of points and returns the correct vega specification component. Additionally, we append signals directly into the vega spec so that we can detect the user's right and left arrow keys. Instead of the user having to choose "left" or "right" in some drop down, the user will be able to use the left and right arrow keys to pick the chart. We add an additional signal to "highlight" the selected chart with a thick blue border. Finally, since we specified "nextOnEnter" as "True" in the "uiConfig", the user will also be able to proceed to the next component by pressing the "Enter" key. All of this combined creates a seamless study experience.
-
-
-```python
-def component_function(visType=None, numPoints=None, corrValues=None):
- if(visType is not None and numPoints is not None and corrValues is not None):
- vega_spec = create_vega_chart(visType=visType, numPoints=numPoints, corrValues=corrValues)
-
- # Update signals with new signals for the final vega spec.
- vega_spec['config']["signals"] = [
- {
- "name": "revisitAnswer",
- "value": {},
- "on": [
- {
- "events": "@concat_0_group:click",
- "update": "{responseId: 'vegaDemoResponse1', response: 'left'}"
- },
- {
- "events": "@concat_1_group:click",
- "update": "{responseId: 'vegaDemoResponse1', response: 'right'}"
- },
- {
- "events": {"source": "window", "type": "keydown"},
- "update": "event.key === 'ArrowLeft' ? {responseId: 'vegaDemoResponse1', response: 'left'} : event.key === 'ArrowRight' ? {responseId: 'vegaDemoResponse1', response: 'right'} : revisitAnswer"
- },
- ]
- }
- ]
-
- # Add signal based bordering
- for entry in vega_spec['marks']:
- if entry['name'] == 'concat_0_group':
- condition = 'left'
- else:
- condition = 'right'
- entry['encode']['update']['stroke'] = {
- "signal": f"revisitAnswer.response === '{condition}' ? 'blue' : null"
- },
- entry['encode']['update']['strokeWidth'] = {
- "signal": f"revisitAnswer.response === '{condition}' ? 3 : 0"
- }
-
- return rvt.component(
- type='vega',
- config=vega_spec,
- component_name__=f'{visType}-{numPoints}-{round(corrValues[0],1)},{round(corrValues[1],1)}',
- response=[
- rvt.response(
- id='vegaDemoResponse1',
- prompt='You Selected: ',
- location='sidebar',
- type='reactive',
- required=True
- )
- ]
- )
-
- return rvt.component(
- type='questionnaire',
- component_name__='blank-component'
- )
-
-# You can print the output of our component function with some test values.
-
-# print(component_function('scatterPlot',20,corrValues=[0.2,0.9]))
-```
-
-## Permuting the Final Sequence
-
-Here we generate the different combinations of the correlation values that we'd like (every combination of two numbers between 0 and 1 with precision 1). Then, we generate a fixed order sequence and being the permutations over our factors. We first permute over the visualization type, then over the number of points, then over all possible correlation value pairs.
-
-When we permute over these factors, the corresponding factored will be added to the `meta` attributes of each component. By the end of these three permutations, we will have components that have 'visType', 'numPoints', and 'corrValues' key-value pairs in their `meta` attribute. Before calling the `component` method, these are all "filler" or "placeholder" components with no real value aside from their metadata attributes. Once we call the `component` method, each component is passed through the inputted `component_function` which will take the existing metadata as arguments. Thus, by the end of this method chaining, each component will be the correct vega component.
-
-After we have finished generating the sequence, we add the entire component block to an a sequence only containing the introduction.
-
-
-```python
-import itertools
-
-# Generate all combinations of two values between 1 and 10
-combinations = itertools.combinations(range(1, 11), 2)
-
-# Create the dataset with values divided by 10
-dataSet = [{'corrValues': [x / 10, y / 10]} for x, y in combinations]
-
-main_sequence = rvt.sequence(order='fixed')
-
-main_sequence.permute(
- factors=[{'visType': 'scatterPlot'}, {'visType': 'parallelCoords'}],
- order='latinSquare',
- ).permute(
- factors=[{'numPoints': 20}, {'numPoints': 100}],
- order='fixed',
- ).permute(
- factors=dataSet,
- order='random',
- ).component(component_function)
-
-sequence = rvt.sequence(order='fixed',components=[introduction]) + main_sequence
-
-study = rvt.studyConfig(
- schema="https://raw.githubusercontent.com/revisit-studies/study/v2.0.0-rc1/src/parser/StudyConfigSchema.json",
- uiConfig=ui_config,
- studyMetadata=study_metadata,
- sequence=sequence
-)
-
-# Prints the entire configuration file which is approximately 230,000 lines of JSON
-# print(study)
-
-```
-
-# Using `revisitpy-server` to Prepare Our Widget
-
-The `revisitpy` package provides a widget in order to preview our study directly in a Jupyter notebook. We can interact with the study, check that vega signals work, and even create some introductory data ourselves. In order for the widget to work, a local copy of reVISit must be running on your local computer. If you already have reVISit locally (colloquially our `study` repo), then all you need to do is navigate to your repository and run `yarn serve`. After this, the widget we create in this Jupyter notebook will be usable.
-
-A simpler way to achieve the same goal, however, is using the `revisitpy-server` Python package. This is a simple Python package which already has the most recent reVISit repository built and runs a server locally. After installing `revisitpy-server`, all that is required is the following:
-
-
-```python
-import revisitpy_server as rs
-process = rs.serve()
-```
-**Output:**
-```output
-Server is running in the background at http://localhost:8080
-```
-## The Widget
-
-Now that your server is running, we create the widget with the configuration file we created above. When calling the widget, we are assuming that the assets referenced in the configuration file are relative to this notebook. The widget then copies these static assets to the appropriate directory. Since we're currently using the `revisitpy-server` package, you'll see that they are copied into the assets of the local virtual environment `revisitpy-server` package.
-
-
-```python
-w = rvt.widget(study, server=True)
-
-# In your own Jupyter notebook, calling `w` will now display the widget in a fully interactive manner.
-w
-```
-**Output:**
-```output
-Copying file from ./assets/introduction.md to /Users/bbollen23/revisit-py-examples/.venv/lib/python3.12/site-packages/revisitpy_server/static/__revisit-widget/assets/introduction.md
-Copying file from ./assets/revisitLogoSquare.svg to /Users/bbollen23/revisit-py-examples/.venv/lib/python3.12/site-packages/revisitpy_server/static/__revisit-widget/assets/revisitLogoSquare.svg
-```
-## Optional: Data Collection
-
-Now that we have the widget running, we can check out some sample data that would be generated from a user. Start by going through a small portion of the study. Once you've gone through the desired number of components inside the widget, navigate to the analysis dashboard using the 'Analysis' tab in the upper left-hand corner. Here you'll see individual participants and the data that they've generated.
-
-From here, we can export this data back into our Jupyter notebook. Start by clicking the "Download as Tidy CSV" on the right-hand side above the table. Here you'll be shown a preview of the CSV file with some additional options to truncate the data. In the bottom right-hand corner, you'll see a button with the Python icon. Clicking on this button will send the Tidy CSV back to the Jupyter notebook. Once the button is clicked, we can preview the data like so:
-
-
-```python
-df = w.get_df()
-```
-
-
-```python
-import pandas as pd
-import seaborn as sns
-import matplotlib.pyplot as plt
-
-filtered_df = df[df['trialId'].str.startswith(('parallelCoords-', 'scatterPlot-'))].copy()
-
-filtered_df['visType'] = filtered_df['trialId'].apply(
- lambda x: 'parallelCoordinates' if x.startswith('parallelCoords-')
- else 'scatterPlot' if x.startswith('scatterPlot-')
- else x
-)
-
-sns.violinplot(x='visType', y='duration', data=filtered_df)
-plt.title('Duration by Visualization Type')
-plt.xlabel('Visualization Type')
-plt.ylabel('Duration')
-plt.show()
-```
-
-
-
-# Optional: Terminate the server
-
-Closing the notebook will automatically terminate the server. If you'd rather do this manually, you can do the following.
-
-
-```python
-process.terminate()
-```
-
-
-```python
-
-```
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/revisitpy/examples/example_jnd_study_files/example_jnd_study_10_0.png b/versioned_docs/version-v2.4.1/revisitpy/examples/example_jnd_study_files/example_jnd_study_10_0.png
deleted file mode 100644
index ce5fefebc9..0000000000
Binary files a/versioned_docs/version-v2.4.1/revisitpy/examples/example_jnd_study_files/example_jnd_study_10_0.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/revisitpy/examples/example_jnd_study_files/example_jnd_study_19_0.png b/versioned_docs/version-v2.4.1/revisitpy/examples/example_jnd_study_files/example_jnd_study_19_0.png
deleted file mode 100644
index 6f320769c9..0000000000
Binary files a/versioned_docs/version-v2.4.1/revisitpy/examples/example_jnd_study_files/example_jnd_study_19_0.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/revisitpy/examples/example_jnd_study_files/example_jnd_study_5_0.png b/versioned_docs/version-v2.4.1/revisitpy/examples/example_jnd_study_files/example_jnd_study_5_0.png
deleted file mode 100644
index 8fa47fd894..0000000000
Binary files a/versioned_docs/version-v2.4.1/revisitpy/examples/example_jnd_study_files/example_jnd_study_5_0.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/revisitpy/examples/example_simple_html.md b/versioned_docs/version-v2.4.1/revisitpy/examples/example_simple_html.md
deleted file mode 100644
index 9fc481ffb0..0000000000
--- a/versioned_docs/version-v2.4.1/revisitpy/examples/example_simple_html.md
+++ /dev/null
@@ -1,296 +0,0 @@
-# Simple HTML Study
-
-Here we will get familiar with the syntax of the reVISitPy package. To do this, we'll recreate the config for the simple html study [here](https://github.com/revisit-studies/study/blob/main/public/demo-html-input/config.json). We'll start by first creating the study metadata and the UI configuration.
-
-```python
-import revisitpy as rvt
-
-study_metadata = rvt.studyMetadata(
- title='Passing Data From reVISit to HTML and back',
- version='pilot',
- authors=[
- 'The reVISit Team',
- 'reVISitPy'
- ],
- date='2025-01-20',
- description="A demo of how to pass visualization data from reVISit to HTML and send user answers from HTML back to the reVISit.",
- organizations=[
- "University of Utah",
- "WPI"
- ]
-)
-
-ui_config = rvt.uiConfig(
- contactEmail="contact@revisit.dev",
- helpTextPath="./assets/help.md",
- logoPath="./assets/revisitLogoSquare.svg",
- withProgressBar=True,
- autoDownloadStudy=False,
- autoDownloadTime=5000,
- withSidebar=False
-)
-```
-
-## Creating Response and Base Components
-
-Next we'll create the response and the base component that we will be using. Note that in the reVISitPy package, the base components work in a slightly different way. Instead of directly adjusting the `"baseComponent"` top level key in the configuration file, the inheritance is handled directly in the library. So, when you inspect a component that has a base, the component will already have all the appropriate properties from the base. Similar to the config, however, a base component in `revisitpy` is defined in the same exact way as a regular component.
-
-
-```python
-response_one = rvt.response(
- id='barChart',
- prompt='Your selected answer:',
- location='belowStimulus',
- type='reactive',
- required=True
-)
-
-correct_answer = rvt.answer(
- id='barChart',
- answer='A'
-)
-base_component = rvt.component(
- component_name__='bar-chart',
- type='website',
- response=[response_one],
- path="./assets/bar-chart-interaction.html",
- instructionLocation='aboveStimulus',
- correctAnswer=[correct_answer],
-)
-```
-
-# Generating the regular components
-
-Since we have the base components set up, we can create our two other components which both inherit these bases.
-
-
-```python
-# No need to define the response in this component since it will automatically be initialized as empty.
-introduction = rvt.component(
- component_name__='introduction',
- type='markdown',
- path='./assets/introduction.md' # <--- Relative path to asset from this notebook
-)
-
-comp_one = rvt.component(
- base__=base_component,
- component_name__='bar-chart-1',
- description="A trial for the user to click the largest bar",
- instruction='Click on the largest bar',
- parameters={
- "barData": [
- 0.32,
- 0.01,
- 1.2,
- 1.3,
- 0.82,
- 0.4,
- 0.3
- ]
- }
-)
-
-comp_two = rvt.component(
- base__=base_component,
- component_name__='bar-chart-2',
- description="A trial for the user to click the smallest bar",
- instruction='Click on the smallest bar',
- parameters={
- "barData": [
- 1.2,
- 1.2,
- 1.2,
- 1.3,
- 0.82,
- 0.4,
- 0.3
- ]
- }
-)
-```
-
-## Generate The Sequence and Final Config
-
-Now that all the individual pieces are created, we'll create the sequence and then the final configuration file.
-
-
-```python
-sequence = rvt.sequence(
- order='fixed',
- components=[
- introduction,
- comp_one,
- comp_two
- ]
-)
-
-# Adding 'components' directly is not necessary since they are already defined in the original sequence.
-study = rvt.studyConfig(
- schema='https://raw.githubusercontent.com/revisit-studies/study/v2.0.0/src/parser/StudyConfigSchema.json',
- uiConfig=ui_config,
- studyMetadata=study_metadata,
- sequence=sequence
-)
-
-print(study)
-```
-**Output:**
-```output
-{
- "$schema": "https://raw.githubusercontent.com/revisit-studies/study/v2.0.0/src/parser/StudyConfigSchema.json",
- "components": {
- "introduction": {
- "path": "./assets/introduction.md",
- "response": [],
- "type": "markdown"
- },
- "bar-chart-1": {
- "correctAnswer": [
- {
- "answer": "A",
- "id": "barChart"
- }
- ],
- "description": "A trial for the user to click the largest bar",
- "instruction": "Click on the largest bar",
- "instructionLocation": "aboveStimulus",
- "parameters": {
- "barData": [
- 0.32,
- 0.01,
- 1.2,
- 1.3,
- 0.82,
- 0.4,
- 0.3
- ]
- },
- "path": "./assets/bar-chart-interaction.html",
- "response": [
- {
- "id": "barChart",
- "location": "belowStimulus",
- "prompt": "Your selected answer:",
- "required": true,
- "type": "reactive"
- }
- ],
- "type": "website"
- },
- "bar-chart-2": {
- "correctAnswer": [
- {
- "answer": "A",
- "id": "barChart"
- }
- ],
- "description": "A trial for the user to click the smallest bar",
- "instruction": "Click on the smallest bar",
- "instructionLocation": "aboveStimulus",
- "parameters": {
- "barData": [
- 1.2,
- 1.2,
- 1.2,
- 1.3,
- 0.82,
- 0.4,
- 0.3
- ]
- },
- "path": "./assets/bar-chart-interaction.html",
- "response": [
- {
- "id": "barChart",
- "location": "belowStimulus",
- "prompt": "Your selected answer:",
- "required": true,
- "type": "reactive"
- }
- ],
- "type": "website"
- }
- },
- "sequence": {
- "components": [
- "introduction",
- "bar-chart-1",
- "bar-chart-2"
- ],
- "order": "fixed"
- },
- "studyMetadata": {
- "authors": [
- "The reVISit Team",
- "reVISitPy"
- ],
- "date": "2025-01-20",
- "description": "A demo of how to pass visualization data from reVISit to HTML and send user answers from HTML back to the reVISit.",
- "organizations": [
- "University of Utah",
- "WPI"
- ],
- "title": "Passing Data From reVISit to HTML and back",
- "version": "pilot"
- },
- "uiConfig": {
- "autoDownloadStudy": false,
- "autoDownloadTime": 5000.0,
- "contactEmail": "contact@revisit.dev",
- "helpTextPath": "./assets/help.md",
- "logoPath": "./assets/revisitLogoSquare.svg",
- "withProgressBar": true,
- "withSidebar": false
- }
-}
-```
-# Visualizing the Study
-
-Now that we have the study completed, let's use the widget to visualize this. We'll start by using the `revisitpy-server` package to run a local copy of the reVISit repo.
-
-## Running the Server
-
-Simply import the `revisitpy-server` package and call `rs.serve()`. We set the return value of `rs.serve()` to `process` so that we can terminate the process afterwards if desired.
-
-
-```python
-import revisitpy_server as rs
-
-process = rs.serve()
-```
-**Output:**
-```output
-Server is running in the background at http://localhost:8080
-```
-## Launching The Widget
-
-Launching the widget is also straightforward -- especially when using the `revisitpy_server` package.
-
-
-```python
-w = rvt.widget(study, server=True)
-# In your own Jupyter notebook, calling `w` will now display the widget in a fully interactive manner.
-# w
-```
-**Output:**
-```output
-Copying file from ./assets/introduction.md to /Users/bbollen23/revisit-py-examples/.venv/lib/python3.12/site-packages/revisitpy_server/static/__revisit-widget/assets/introduction.md
-Copying file from ./assets/bar-chart-interaction.html to /Users/bbollen23/revisit-py-examples/.venv/lib/python3.12/site-packages/revisitpy_server/static/__revisit-widget/assets/bar-chart-interaction.html
-Copying file from ./assets/bar-chart-interaction.html to /Users/bbollen23/revisit-py-examples/.venv/lib/python3.12/site-packages/revisitpy_server/static/__revisit-widget/assets/bar-chart-interaction.html
-Copying file from ./assets/help.md to /Users/bbollen23/revisit-py-examples/.venv/lib/python3.12/site-packages/revisitpy_server/static/__revisit-widget/assets/help.md
-Copying file from ./assets/revisitLogoSquare.svg to /Users/bbollen23/revisit-py-examples/.venv/lib/python3.12/site-packages/revisitpy_server/static/__revisit-widget/assets/revisitLogoSquare.svg
-```
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/revisitpy/examples/index.md b/versioned_docs/version-v2.4.1/revisitpy/examples/index.md
deleted file mode 100644
index a07744f882..0000000000
--- a/versioned_docs/version-v2.4.1/revisitpy/examples/index.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# Examples
-
-Here you'll find several examples for designing full studies using reVISitPy. Each of the examples takes advantage of the `revisitpy-server` and a Jupyter notebook environment. While neither of these are necessary to create complex configuration files, they are the quickest ways to get started with reVISitPy and the best way to create a closed-feedback loop for quick iterations of your study design.
-
-## Using The Examples Repository
-
-If you're looking for a more hands-on approach to working with these examples, you can find each of these examples in the [reVISitPy examples repository](https://github.com/revisit-studies/revisit-py-examples). We suggest using [uv](https://docs.astral.sh/uv/getting-started/installation/) with this repository since it is the simplest way to get started.
-
-Once you have `uv` installed and the repository successfully cloned, navigate to the repository and run the following:
-
-```bash
-uv sync
-```
-
-This will initialize a virtual environment with all of the necessary packages for the repository (including `revisitpy` and `revisitpy-server`). Then, when running any of the examples, you just need to choose the `ipykernel` associated with your virtual environment (by default, this is the `.venv` directory).
-
-
-
-
-
-import DocCardList from '@theme/DocCardList';
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/revisitpy/img/intro-widget.png b/versioned_docs/version-v2.4.1/revisitpy/img/intro-widget.png
deleted file mode 100644
index 84d9e5cdd1..0000000000
Binary files a/versioned_docs/version-v2.4.1/revisitpy/img/intro-widget.png and /dev/null differ
diff --git a/versioned_docs/version-v2.4.1/revisitpy/index.md b/versioned_docs/version-v2.4.1/revisitpy/index.md
deleted file mode 100644
index fee811f471..0000000000
--- a/versioned_docs/version-v2.4.1/revisitpy/index.md
+++ /dev/null
@@ -1,93 +0,0 @@
-# ReVISitPy Python Package
-
-The reVISitPy Python package is a pip package that aids in the construction of configuration files. Just like in the study configuration file, you can create components, responses, study metadata, UI config, and complex sequences. Then, you can combine these all together in a single study configuration file. Here is an example of creating a simple response and attaching it to a single component.
-
-```python
-response_one = rvt.response(
- id='response_one',
- type='shortText',
- prompt='Original Prompt:'
-)
-
-component_one = rvt.component(
- component_name__='component_one',
- type='questionnaire',
- response=[test_response]
-)
-
-print(component_one)
-```
-
-```python
-'''
-Expected Output:
-{
- "response": [
- {
- "id": "test_response",
- "prompt": "Original Prompt:",
- "type": "shortText"
- }
- ],
- "type": "questionnaire"
-}
-'''
-```
-
-Each of the classes that we exposed can be printed to show the JSON output.
-
-## Closed Feedback Loop
-
-We wanted to create a package which not only makes creating long, complex configuration files easier, but also provide feedback for your designs faster. ReVISitPy exposes a `widget` component that allows you to immediately visualize a configuration file directly in a Jupyter notebook.
-
-
-
-When using the widget, you can immediately interact with the study in the Jupyter notebook and see how each of your components and responses will function. Additionally, you can see how the data will be outputted in the Analysis tab and even export your testing data back to the Jupyter notebook.
-
-:::info
-Note that a Jupyter environment is not necessary to take advantage of reVISitPy. Jupyter enhances the experience by providing this widget functionality, but configuration files can still be created and saved using reVISitPy with a standard Python environment.
-:::
-
-
-
-## Advanced Sequence Creation
-
-When using the reVISitPy Python package, not only do you have all the flexibility of using a full programming language, we have also built several different features to help create complex study designs. Generated data in a separate CSV file? Pass the data in using reVISitPy's `from_data` method in order to create components based on the data. Need to permute over multiple different factors? Use the `Sequence` class's built-in `permute` function to generate components based on these factors while simultaneously permuting over possible combinations of them.
-
-## Usage
-
-If you're ready to get started using reVISitPy in your own Python environment, check out the [installation page](./installation.md). If you'd like to try out the package as quickly as possible, we instead suggest using the [reVISitPy examples repository](https://github.com/revisit-studies/revisit-py-examples). This repository uses a Jupyter notebook to walk you through each example. Start by cloning the repository:
-
-
-```bash
-git clone git@github.com:revisit-studies/revisit-py-examples.git
-```
-
-Once you have cloned the repository, we recommend installing the Python package manager [uv](https://docs.astral.sh/uv/). We use `uv` for a myriad of reasons, but most importantly because it will manage your virtual environment for you which ensures that you'll be able to use the repository with very little setup.
-
-After you've installed `uv`, navigate to the examples repository you just cloned and call the following:
-
-```bash
-uv install
-```
-
-This will install all the necessary dependencies for the examples, including reVISitPy (`revisitpy`) and its support package (`revisitpy-server`).
-
-:::note
-When choosing the Jupyter kernel to use, you should use the one that corresponds to the virtual environment in the `revisit-py-examples` repository. This, by default, will be initialized in the `.venv` directory after running `uv install`.
-:::
-
-Each of the examples in the `revisit-py-examples` repository are also shown [here](./examples/index.md) in markdown format.
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/revisitpy/installation.md b/versioned_docs/version-v2.4.1/revisitpy/installation.md
deleted file mode 100644
index 35848d8108..0000000000
--- a/versioned_docs/version-v2.4.1/revisitpy/installation.md
+++ /dev/null
@@ -1,72 +0,0 @@
-# Installation
-
-
-
-Adding reVISitPy to a python project is simple. If you're using `pip`, you can do the following:
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-
-
-
-```sh
-pip install revisitpy
-```
-
-
-
-
-```sh
-uv add revisitpy
-```
-
-
-
-
-This will provide you with all the functionality that reVISitPy provides -- including the widget to view your study in a Jupyter notebook.
-
-
-## ReVISit Server
-
-The widget functionality of reVISitPy requires that you have a local copy of reVISit running on port 8080. If you do not have the study repository cloned on your local machine, you can still run a local copy or reVISit directly in python without needing to clone our main repository by using our `revisitpy-server` package.
-
-
-
-
-```sh
-pip install revisitpy-server
-```
-
-
-
-
-```sh
-uv add revisitpy-server
-```
-
-
-
-
-Once installed, you will be able to serve a local copy of reVISit like so (note the use of an underscore instead of dash in the import statement):
-
-```python
-import revisitpy_server as rs
-
-process = rs.serve()
-```
-
-:::note
-Note that this is, by default, serving a copy of reVISit on port 8080. Currently, there are no adjustments in place to change this default port. We intend to allow for more customization in the future.
-:::
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
\ No newline at end of file
diff --git a/versioned_docs/version-v2.4.1/revisitpy/overview.md b/versioned_docs/version-v2.4.1/revisitpy/overview.md
deleted file mode 100644
index e5d8a252a7..0000000000
--- a/versioned_docs/version-v2.4.1/revisitpy/overview.md
+++ /dev/null
@@ -1,77 +0,0 @@
-# Overview
-
-The reVISit Python package wraps the standard items of the reVISit configuration file with readable, easy-to-use functions. We expose a factory function for each top-level item in the reVISit configuration: `studyMetadata`, `uiConfig`, `components`, and `sequence`. Currently, we do not expose a `baseComponents` function. Instead, base components are still well-defined components and can be passed during the creation of another component. The final configuration will not include base components but will have the expected inherited output.
-
-Each factory function takes in the same parameters as the reVISit configuration file. For example, the `studyMetadata` function requires the author, organizations, title, version, and description parameters. Robust error output will help you, the user, understand what is required in each function. For the sake of brevity, we do not list every possible parameter since these are already defined in the current study configuration. Instead, we will show additional required/optional parameters as well as additional methods and other exposed functions.
-
-The individual classes (`Component`, `Response`, `Sequence`, `StudyMetadata`, `UIConfig`, and `StudyConfig`) should not be created directly. Instead, you should use the corresponding factory functions to instantiate them (`component()`, `response()`, `sequence()`, `studyMetadata()`, `uiConfig()`, and `studyConfig()`).
-
-## Using The Widget
-
-As stated previously, the widget requires a local copy of the reVISit application to be running. If you have a local copy already on your machine, you can get started by first navigating to your study repo and running `yarn serve`. If you do not have a local copy of reVISit and would like to handle all this directly in python, use the `revisitpy-server` package.
-
-:::info
-While all configuration creation can be done in a standard Python environment, the provided widget only has functionality inside of a Jupyter notebook.
-:::
-
-Whether you are using `revisitpy-server` or your local copy of reVISit, the widget requires you to pass in the configuration file that you intend to view in the Jupyter notebook in addition to other parameters.
-
-### Use with a Local reVISit Repository
-
-When using your own copy of the reVISit repository, the widget requires you to specify the `revisitPath` (i.e. the absolute path to your study repository that is running).
-
-```python
-import revisitpy as rvt
-
-w = rvt.widget(my_study, revisitPath='/path/to/study')
-
-# View the widget in a Jupyter notebook by running 'w'
-w
-```
-
-### Using reVISitPy Server
-
-If you're using the `revisitpy-server` package, the widget does not require the path to the server location by default.
-
-```python
-import revisitpy as rvt
-
-w = rvt.widget(my_study, server=True)
-
-# View the widget in a Jupyter notebook by running 'w'
-w
-```
-
-If you installed the `revisitpy-server` package in a different environment than the `revisitpy` package, you'll instead need to specify the path to that library.
-
-```python
-import revisitpy as rvt
-
-w = rvt.widget(my_study, server=True, pathToLib='/absolute/path/to/revisitpy_server')
-
-# View the widget in a Jupyter notebook by running 'w'
-w
-```
-
-## Widget And Study Assets
-
-The widget function passes the study configuration file as an iframe to the widget displayed in the Jupyter notebook. The assets, however, are directly copied to the repository (or `revisitpy-server` package). Thus, all the paths you specify in your study should be absolute paths to the assets or relative to your current working directory. The widget handles where they should be moved to.
-
-:::warning
-Since the `revisitpy-server` package uses an already built version of the reVISit application, `react-component` assets will not be copied over to the package directory. All other assets will work as expected. If your study heavily relies on react components as study assets, we suggest using a local copy of reVISit instead of the `revisitpy-server`, or use placeholder components until you're ready to deploy your study.
-:::
-
-
-
-
-import StructuredLinks from '@site/src/components/StructuredLinks/StructuredLinks.tsx';
-
-
diff --git a/versioned_docs/version-v2.4.1/typedoc/globals.md b/versioned_docs/version-v2.4.1/typedoc/globals.md
deleted file mode 100644
index 5543dae90a..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/globals.md
+++ /dev/null
@@ -1,71 +0,0 @@
-# Modules
-
-## Interfaces
-
-- [Answer](interfaces/Answer.md)
-- [BaseIndividualComponent](interfaces/BaseIndividualComponent.md)
-- [BaseResponse](interfaces/BaseResponse.md)
-- [ButtonsResponse](interfaces/ButtonsResponse.md)
-- [CheckboxResponse](interfaces/CheckboxResponse.md)
-- [ComponentBlock](interfaces/ComponentBlock.md)
-- [ComponentBlockCondition](interfaces/ComponentBlockCondition.md)
-- [DeterministicInterruption](interfaces/DeterministicInterruption.md)
-- [DividerResponse](interfaces/DividerResponse.md)
-- [DropdownResponse](interfaces/DropdownResponse.md)
-- [DynamicBlock](interfaces/DynamicBlock.md)
-- [GlobalConfig](interfaces/GlobalConfig.md)
-- [ImageComponent](interfaces/ImageComponent.md)
-- [IndividualComponentAllResponsesCondition](interfaces/IndividualComponentAllResponsesCondition.md)
-- [IndividualComponentSingleResponseCondition](interfaces/IndividualComponentSingleResponseCondition.md)
-- [LibraryConfig](interfaces/LibraryConfig.md)
-- [LikertResponse](interfaces/LikertResponse.md)
-- [LongTextResponse](interfaces/LongTextResponse.md)
-- [MarkdownComponent](interfaces/MarkdownComponent.md)
-- [MatrixCheckboxResponse](interfaces/MatrixCheckboxResponse.md)
-- [MatrixRadioResponse](interfaces/MatrixRadioResponse.md)
-- [NumberOption](interfaces/NumberOption.md)
-- [NumericalResponse](interfaces/NumericalResponse.md)
-- [ParsedStringOption](interfaces/ParsedStringOption.md)
-- [ParticipantData](interfaces/ParticipantData.md)
-- [ParticipantMetadata](interfaces/ParticipantMetadata.md)
-- [QuestionnaireComponent](interfaces/QuestionnaireComponent.md)
-- [RadioResponse](interfaces/RadioResponse.md)
-- [RandomInterruption](interfaces/RandomInterruption.md)
-- [RankingResponse](interfaces/RankingResponse.md)
-- [ReactComponent](interfaces/ReactComponent.md)
-- [ReactiveResponse](interfaces/ReactiveResponse.md)
-- [RepeatedComponentBlockCondition](interfaces/RepeatedComponentBlockCondition.md)
-- [ShortTextResponse](interfaces/ShortTextResponse.md)
-- [SliderResponse](interfaces/SliderResponse.md)
-- [StoredAnswer](interfaces/StoredAnswer.md)
-- [StringOption](interfaces/StringOption.md)
-- [StudyConfig](interfaces/StudyConfig.md)
-- [StudyMetadata](interfaces/StudyMetadata.md)
-- [StudyRules](interfaces/StudyRules.md)
-- [TextOnlyResponse](interfaces/TextOnlyResponse.md)
-- [UIConfig](interfaces/UIConfig.md)
-- [VegaComponentConfig](interfaces/VegaComponentConfig.md)
-- [VegaComponentPath](interfaces/VegaComponentPath.md)
-- [VideoComponent](interfaces/VideoComponent.md)
-- [WebsiteComponent](interfaces/WebsiteComponent.md)
-
-## Type Aliases
-
-- [BaseComponents](type-aliases/BaseComponents.md)
-- [BrowserRules](type-aliases/BrowserRules.md)
-- [ConfigResponseBlockLocation](type-aliases/ConfigResponseBlockLocation.md)
-- [DeviceRules](type-aliases/DeviceRules.md)
-- [DisplayRules](type-aliases/DisplayRules.md)
-- [ErrorWarningCategory](type-aliases/ErrorWarningCategory.md)
-- [IndividualComponent](type-aliases/IndividualComponent.md)
-- [InheritedComponent](type-aliases/InheritedComponent.md)
-- [InputRules](type-aliases/InputRules.md)
-- [InterruptionBlock](type-aliases/InterruptionBlock.md)
-- [MatrixResponse](type-aliases/MatrixResponse.md)
-- [Response](type-aliases/Response.md)
-- [SkipConditions](type-aliases/SkipConditions.md)
-- [Styles](type-aliases/Styles.md)
-- [UserBrowser](type-aliases/UserBrowser.md)
-- [UserDevice](type-aliases/UserDevice.md)
-- [UserInput](type-aliases/UserInput.md)
-- [VegaComponent](type-aliases/VegaComponent.md)
diff --git a/versioned_docs/version-v2.4.1/typedoc/index.md b/versioned_docs/version-v2.4.1/typedoc/index.md
deleted file mode 100644
index d622b2a67e..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/index.md
+++ /dev/null
@@ -1,99 +0,0 @@
-# Reference Documentation
-
-## General reVISit
-
-- [GlobalConfig](interfaces/GlobalConfig.md) — The GlobalConfig is used to generate the list of available studies in the UI.
-
-## Data Formats
-
-- [ParticipantData](interfaces/ParticipantData.md) – The ParticipantData is a JSON object that includes data for a participant in your study. This is how the data is stored in the database and how it will download with the JSON downloader.
-- [StoredAnswer](interfaces/StoredAnswer.md) - The StoredAnswer object is a data structure describing the participant's interaction with an individual component. It is used by ParticipantData to store individual answers.
-
-## reVISit Spec
-
-- [StudyConfig](interfaces/StudyConfig.md) – The StudyConfig interface is used to define the properties of a study configuration. This is a JSON object with four main components: the StudyMetadata, the UIConfig, the Components, and the Sequence.
-- [StudyMetadata](interfaces/StudyMetadata.md) – A top-level property of the `StudyConfig`. The study metadata defines elements such as the study title, authors, and description.
-- [UIConfig](interfaces/UIConfig.md) – A top-level property of the `StudyConfig`, defining the appearance of the study.
-
-For other components of the reVISit spec see [Components](#components) and [Sequencing](#sequencing)
-
-## Components
-
-Components contain study-specific content. See the [How does it Work](https://revisit.dev/docs/getting-started/how-does-it-work) guide for an introduction.
-
-The different component types:
-- [ImageComponent](interfaces/ImageComponent.md)
-- [MarkdownComponent](interfaces/MarkdownComponent.md)
-- [QuestionnaireComponent](interfaces/QuestionnaireComponent.md)
-- [ReactComponent](interfaces/ReactComponent.md)
-- [VegaComponent](type-aliases/VegaComponent.md)
-- [VideoComponent](interfaces/VideoComponent.md)
-- [WebsiteComponent](interfaces/WebsiteComponent.md)
-
-## Responses
-
-Responses allow study designers to collect responses from participants. Responses are included on administrative forms, such as consent or training, but most importantly as a response to a stimulus.
-
-- [Response](type-aliases/Response.md)
-- [ReactiveResponse](interfaces/ReactiveResponse.md)
-- [Answer](interfaces/Answer.md)
-
-### Form Elements
-
-Responses are provided as form elements. See the [example](https://revisit.dev/study/demo-form-elements/) and the [example-source](https://github.com/revisit-studies/study/blob/main/public/demo-form-elements/config.json)
-
-ReVISit supports the following form elements:
-
-The BaseResponse contains generic fields that all form elements share:
-- [BaseResponse](interfaces/BaseResponse.md)
-
-You can ask for text responses:
-- [LongTextResponse](interfaces/LongTextResponse.md)
-- [ShortTextResponse](interfaces/ShortTextResponse.md)
-
-Numerical responses via fields or sliders:
-- [NumericalResponse](interfaces/NumericalResponse.md)
-- [SliderResponse](interfaces/SliderResponse.md)
-
-Choices of items via checkboxes, drop-downs, or buttons:
-- [CheckboxResponse](interfaces/CheckboxResponse.md)
-- [RadioResponse](interfaces/RadioResponse.md)
-- [DropdownResponse](interfaces/DropdownResponse.md)
-- [ButtonsResponse](interfaces/ButtonsResponse.md)
-
-Likert-style rating scales:
-- [LikertResponse](interfaces/LikertResponse.md)
-
-Matrix-style options that can be used for numerical or categorical responses:
-- [MatrixResponse](interfaces/MatrixResponse.md)
-
-You can specify numerical and textual responses through those interfaces:
-- [NumberOption](interfaces/NumberOption.md)
-- [StringOption](interfaces/StringOption.md)
-
-Ranking-style options that let participants order or compare items:
-- [RankingResponse](interfaces/RankingResponse.md)
-
-There is also a response that doesn't actually take a response, which is useful when you want to show some text in the middle of a form:
-- [TextOnlyResponse](interfaces/TextOnlyResponse.md)
-
-## Sequencing
-
-Sequencing determines the order in which components appear.
-
-- [ComponentBlock](interfaces/ComponentBlock.md) — The ComponentBlock interface is used to define order properties within the sequence.
-- [DynamicBlock](interfaces/DynamicBlock.md) — The DynamicBlock interface is used to dynamically define the sequence of components based on previous responses or other factors.
-
-Interruptions augment the sequence with components that are inserted either randomly or deterministically. These might be for breaks or attention checks.
-
-- [DeterministicInterruption](interfaces/DeterministicInterruption.md)
-- [RandomInterruption](interfaces/RandomInterruption.md)
-- [InterruptionBlock](type-aliases/InterruptionBlock.md)
-
-Skip conditions enable the participant to jump through the sequence if a certain condition is met.
-
-- [SkipConditions](type-aliases/SkipConditions.md)
-- [ComponentBlockCondition](interfaces/ComponentBlockCondition.md)
-- [IndividualComponentAllResponsesCondition](interfaces/IndividualComponentAllResponsesCondition.md)
-- [IndividualComponentSingleResponseCondition](interfaces/IndividualComponentSingleResponseCondition.md)
-- [RepeatedComponentBlockCondition](interfaces/RepeatedComponentBlockCondition.md)
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/Answer.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/Answer.md
deleted file mode 100644
index 2476e408fa..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/Answer.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# Answer
-
-Defined in: [parser/types.ts:927](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L927)
-
-The Answer interface is used to define the properties of an answer. Answers are used to define the correct answer for a task. These are generally used in training tasks or if skip logic is required based on the answer.
-
-Answers are used to defined correct answers for a task. These are generally used in training tasks or if skip logic is required based on the answer. The answer field is used to define the correct answer to the question. The acceptableLow and acceptableHigh fields are used to define a range of acceptable answers (these are currently only used for training). For example, if the correct answer is 5, and the acceptableLow is 4 and the acceptableHigh is 6, then any answer between 4 and 6 will be considered correct.
-
-Here's an example of how to use the Answer interface to define the correct answer to a question:
-
-```json
-{
- "type": "markdown",
- "path": "/assets/question.md",
- "response": [
- {
- "id": "response1",
- "prompt": "What is 2 + 2?",
- "location": "belowStimulus",
- "type": "numerical"
- }
- ],
- "correctAnswer": [{
- "id": "response1",
- "answer": 4
- }]
- }
-```
-
-In this example, the correct answer to the question "What is 2 + 2?" is 4. If the participant answers 4, they will be considered correct. If they answer anything other than 4, they will be considered incorrect.
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `acceptableHigh?` | `number` | The acceptable high value for the answer. This is used to define a range of acceptable answers. | [parser/types.ts:936](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L936) |
-| `acceptableLow?` | `number` | The acceptable low value for the answer. This is used to define a range of acceptable answers. | [parser/types.ts:934](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L934) |
-| `answer` | `any` | The correct answer to the question. | [parser/types.ts:932](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L932) |
-| `id` | `string` | The id of the answer. This is used to identify the answer in the data file. | [parser/types.ts:929](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L929) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/BaseIndividualComponent.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/BaseIndividualComponent.md
deleted file mode 100644
index 341c9c3920..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/BaseIndividualComponent.md
+++ /dev/null
@@ -1,56 +0,0 @@
-# BaseIndividualComponent
-
-Defined in: [parser/types.ts:946](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L946)
-
-The BaseIndividualComponent interface is used to define the required fields for all components.
-
-All components must include the response field, which is an array of Response interfaces.
-There are additional optional fields that can be included in a component that help layout the task. These include the nextButtonText, nextButtonLocation, instructionLocation, correctAnswer.
-There are other fields that can be included in a component that are used to identify the task in the admin panel. These include the meta, description, instruction, and title fields.
-
-## Extended by
-
-- [`MarkdownComponent`](MarkdownComponent.md)
-- [`ReactComponent`](ReactComponent.md)
-- [`ImageComponent`](ImageComponent.md)
-- [`WebsiteComponent`](WebsiteComponent.md)
-- [`QuestionnaireComponent`](QuestionnaireComponent.md)
-- [`VegaComponentPath`](VegaComponentPath.md)
-- [`VegaComponentConfig`](VegaComponentConfig.md)
-- [`VideoComponent`](VideoComponent.md)
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [parser/types.ts:993](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L993) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L997) |
-| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [parser/types.ts:953](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L953) |
-| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [parser/types.ts:957](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L957) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1001) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [parser/types.ts:973](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L973) |
-| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [parser/types.ts:969](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L969) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [parser/types.ts:971](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L971) |
-| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [parser/types.ts:955](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L955) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [parser/types.ts:983](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L983) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [parser/types.ts:981](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L981) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [parser/types.ts:979](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L979) |
-| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [parser/types.ts:977](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L977) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [parser/types.ts:975](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L975) |
-| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [parser/types.ts:985](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L985) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [parser/types.ts:987](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L987) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [parser/types.ts:989](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L989) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [parser/types.ts:995](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L995) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [parser/types.ts:999](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L999) |
-| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [parser/types.ts:949](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L949) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1003) |
-| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1007) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [parser/types.ts:965](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L965) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [parser/types.ts:967](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L967) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [parser/types.ts:963](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L963) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1011) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1009) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [parser/types.ts:991](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L991) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1005) |
-| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [parser/types.ts:959](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L959) |
-| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [parser/types.ts:961](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L961) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/BaseResponse.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/BaseResponse.md
deleted file mode 100644
index d7d57ac9e8..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/BaseResponse.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# BaseResponse
-
-Defined in: [parser/types.ts:347](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L347)
-
-The BaseResponse interface is used to define the required fields for all responses.
-Other Response interfaces inherit properties from the BaseResponse interface.
-Therefore, all responses must include these properties.
-
-## Extended by
-
-- [`NumericalResponse`](NumericalResponse.md)
-- [`ShortTextResponse`](ShortTextResponse.md)
-- [`LongTextResponse`](LongTextResponse.md)
-- [`LikertResponse`](LikertResponse.md)
-- [`DropdownResponse`](DropdownResponse.md)
-- [`SliderResponse`](SliderResponse.md)
-- [`RadioResponse`](RadioResponse.md)
-- [`CheckboxResponse`](CheckboxResponse.md)
-- [`RankingResponse`](RankingResponse.md)
-- [`ReactiveResponse`](ReactiveResponse.md)
-- [`ButtonsResponse`](ButtonsResponse.md)
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [parser/types.ts:377](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L377) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [parser/types.ts:367](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L367) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [parser/types.ts:349](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L349) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [parser/types.ts:355](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L355) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [parser/types.ts:359](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L359) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [parser/types.ts:365](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L365) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [parser/types.ts:351](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L351) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [parser/types.ts:357](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L357) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [parser/types.ts:363](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L363) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [parser/types.ts:361](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L361) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [parser/types.ts:353](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L353) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [parser/types.ts:375](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L375) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [parser/types.ts:373](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L373) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [parser/types.ts:369](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L369) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [parser/types.ts:371](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L371) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/ButtonsResponse.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/ButtonsResponse.md
deleted file mode 100644
index 752d0b6466..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/ButtonsResponse.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# ButtonsResponse
-
-Defined in: [parser/types.ts:829](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L829)
-
-The ButtonsResponse interface is used to define the properties of a buttons response.
-ButtonsResponses render as a list of buttons that the participant can click. When a button is clicked, the value of the button is stored in the data file.
-Participants can cycle through the options using the arrow keys.
-```json
-{
- "id": "buttonsResponse",
- "type": "buttons",
- "prompt": "Click a button",
- "location": "belowStimulus",
- "default": "Option 2",
- "options": [
- "Option 1",
- "Option 2",
- "Option 3"
- ]
-}
-```
-In this example, the participant can click one of the buttons labeled "Option 1", "Option 2", or "Option 3".
-
-## Extends
-
-- [`BaseResponse`](BaseResponse.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `string` | The default value of the response. Specify one option value as a string. | - | [parser/types.ts:833](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L833) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:377](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L377) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:367](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L367) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:349](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L349) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:355](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L355) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:359](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L359) |
-| `optionOrder?` | `"random"` \| `"fixed"` | The order in which the buttons are displayed. Defaults to fixed. | - | [parser/types.ts:835](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L835) |
-| `options` | (`string` \| [`StringOption`](StringOption.md))[] | - | - | [parser/types.ts:831](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L831) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:365](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L365) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:351](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L351) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:357](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L357) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:363](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L363) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:361](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L361) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:353](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L353) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:375](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L375) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:373](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L373) |
-| `type` | `"buttons"` | - | - | [parser/types.ts:830](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L830) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:369](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L369) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:371](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L371) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/CheckboxResponse.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/CheckboxResponse.md
deleted file mode 100644
index 751ee0a79b..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/CheckboxResponse.md
+++ /dev/null
@@ -1,49 +0,0 @@
-# CheckboxResponse
-
-Defined in: [parser/types.ts:728](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L728)
-
-The CheckboxResponse interface is used to define the properties of a checkbox response.
-CheckboxResponses render as a checkbox input with user specified options.
-```json
-{
- "id": "q7",
- "prompt": "Checkbox example (not required)",
- "location": "aboveStimulus",
- "type": "checkbox",
- "options": ["Option 1", "Option 2", "Option 3"],
- "withDontKnow": true,
- "default": ["Option 1", "I don't know"]
-}
-```
-
-## Extends
-
-- [`BaseResponse`](BaseResponse.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `string`[] | The default value of the response. Specify an array of option values. To preselect the "I don't know" checkbox, include `"I don't know"`. | - | [parser/types.ts:733](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L733) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:377](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L377) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:367](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L367) |
-| `horizontal?` | `boolean` | Whether to render the checkboxes horizontally. Defaults to false, so they render horizontally. | - | [parser/types.ts:741](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L741) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:349](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L349) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:355](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L355) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:359](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L359) |
-| `maxSelections?` | `number` | The maximum number of selections that are required. | - | [parser/types.ts:739](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L739) |
-| `minSelections?` | `number` | The minimum number of selections that are required. | - | [parser/types.ts:737](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L737) |
-| `optionOrder?` | `"random"` \| `"fixed"` | The order in which the checkboxes are displayed. Defaults to fixed. | - | [parser/types.ts:735](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L735) |
-| `options` | (`string` \| [`StringOption`](StringOption.md))[] | The options that are displayed as checkboxes, provided as an array of objects, with label and value fields. | - | [parser/types.ts:731](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L731) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:365](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L365) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:351](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L351) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:357](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L357) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:363](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L363) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:361](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L361) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:353](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L353) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:375](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L375) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:373](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L373) |
-| `type` | `"checkbox"` | - | - | [parser/types.ts:729](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L729) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:369](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L369) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:371](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L371) |
-| `withOther?` | `boolean` | Whether to render the checkboxes with an "other" option. | - | [parser/types.ts:743](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L743) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/ComponentBlock.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/ComponentBlock.md
deleted file mode 100644
index e9ce435ba9..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/ComponentBlock.md
+++ /dev/null
@@ -1,119 +0,0 @@
-# ComponentBlock
-
-Defined in: [parser/types.ts:1693](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1693)
-
-The ComponentBlock interface is used to define order properties within the sequence. This is used to define the order of components in a study and the skip logic. It supports random assignment of trials using a pure random assignment and a [latin square](https://en.wikipedia.org/wiki/Latin_square).
-
-The pure random assignment is a random assignment with no guarantees. For example, one component _could_ show up in the first position 10 times in a row. However, this situation is unlikely.
-
-Here's a snippet that shows how to use the random order:
-
-```json
-{
- "order": "random",
- "components": [
- "component1",
- "component2",
- "component3"
- ]
-}
-```
-This snippet would produce a random order of the components in the sequence array. For example, the resulting sequence array could be :
-
-```json
-[
- ["component2", "component3", "component1"],
- ["component1", "component3", "component2"],
- ["component3", "component1", "component2"],
- ...
-]
-```
-
-The latin square assignment is a random assignment with some guarantees. It ensures that each component is shown an equal number of times in each position. Here's a snippet that shows how to use the latin square order:
-
-```json
-{
- "order": "latinSquare",
- "components": [
- "component1",
- "component2",
- "component3"
- ]
-}
-```
-
-This snippet would produce a latin square order of the components in the sequence array. Since the latin square guarantees that each component is shown an equal number of times in each position, the resulting sequence array could be:
-
-```json
-[
- ["component1", "component2", "component3"],
- ["component2", "component3", "component1"],
- ["component3", "component1", "component2"],
- ...
-]
-```
-
-The fixed assignment is a fixed assignment of components. This is used when you want to show the components in a specific order. Here's a snippet that shows how to use the fixed order:
-
-```json
-{
- "order": "fixed",
- "components": [
- "component1",
- "component2",
- "component3"
- ]
-}
-```
-
-This snippet would produce a fixed order of the components in the sequence array. The resulting sequence array would be:
-
-```json
-[
- ["component1", "component2", "component3"],
- ["component1", "component2", "component3"],
- ["component1", "component2", "component3"],
- ...
-]
-```
-
-In addition to the order property, the ComponentBlock interface also includes the `"numSamples"` property. This is used to reduce the number of components shown to a participant. This property respects the order property and the guarantees provided by the order property. For example, if you have three components in the components array and you set `"numSamples"` to 2, you would randomize across the three components while only showing a participant two of them. Here's a snippet that shows how to use the numSamples property:
-
-```json
-{
- "order": "latinSquare",
- "components": [
- "component1",
- "component2",
- "component3"
- ],
- "numSamples": 2
-}
-```
-
-This snippet would produce a latin square order of the components in the sequence array. Since the latin square guarantees that each component is shown an equal number of times in each position, the resulting sequence array could be:
-
-```json
-[
- ["component1", "component2"],
- ["component2", "component3"],
- ["component3", "component1"],
- ...
-]
-```
-
-The interruptions property specifies an array of interruptions. These can be used for breaks or attention checks. Interruptions can be deterministic or random. Please see [InterruptionBlock](../../type-aliases/InterruptionBlock) for more specific information.
-
-The skip property is used to define skip conditions. This is used to skip to a different component or block based on the response to a component or the number of correct or incorrect responses in a block. Please see [SkipConditions](../../type-aliases/SkipConditions) for more specific information.
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `components` | (`string` \| `ComponentBlock` \| [`DynamicBlock`](DynamicBlock.md))[] | The components that are included in the order. | [parser/types.ts:1699](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1699) |
-| `conditional?` | `boolean` | The conditional property shows the block only when the URL condition matches its `id`. | [parser/types.ts:1707](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1707) |
-| `id?` | `string` | The id of the block. This is used to identify the block in the SkipConditions and is only required if you want to refer to the whole block in the condition.to property. | [parser/types.ts:1695](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1695) |
-| `interruptions?` | [`InterruptionBlock`](../type-aliases/InterruptionBlock.md)[] | The interruptions property specifies an array of interruptions. These can be used for breaks or attention checks. | [parser/types.ts:1703](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1703) |
-| `numSamples?` | `number` | The number of samples to use for the random assignments. This means you can randomize across 3 components while only showing a participant 2 at a time. | [parser/types.ts:1701](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1701) |
-| `order` | `"random"` \| `"latinSquare"` \| `"fixed"` | The type of order. This can be random (pure random), latinSquare (random with some guarantees), or fixed. | [parser/types.ts:1697](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1697) |
-| `skip?` | [`SkipConditions`](../type-aliases/SkipConditions.md) | The skip conditions for the block. | [parser/types.ts:1705](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1705) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/ComponentBlockCondition.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/ComponentBlockCondition.md
deleted file mode 100644
index 1e87e76c05..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/ComponentBlockCondition.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# ComponentBlockCondition
-
-Defined in: [parser/types.ts:1501](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1501)
-
-The ComponentBlockCondition interface is used to define a SkipCondition based on the number of correct or incorrect components in a block. All answers on all components in the block are checked.
-
-Answers are checked against the correct answers defined in the IndividualComponent's [CorrectAnswer](../Answer). If no correct answers are defined, the component is considered correct by default.
-
-You might use this if a participant answers two questions in a block incorrectly. Here's an example of how to use the ComponentBlockCondition:
-
-```json
-{
- ...
- "skip": [
- {
- "check": "block",
- "condition": "numIncorrect",
- "value": 2,
- "to": "end"
- }
- ]
- ...
-}
-```
-
-In this example, when the number of components with incorrect responses in the block is two, the participant will be redirected to the end of the study. If the number of incorrect responses is less than two, the participant will continue to the next component in the sequence.
-
-When the condition is met, the participant will immediately be redirected to the component or block specified in the `"to"` property. If no conditions are met, the participant will continue to the next component in the sequence.
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `check` | `"block"` | The check we'll perform. | [parser/types.ts:1503](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1503) |
-| `condition` | `"numCorrect"` \| `"numIncorrect"` | The condition to check. | [parser/types.ts:1505](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1505) |
-| `to` | `string` | The id of the component or block to skip to | [parser/types.ts:1509](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1509) |
-| `value` | `number` | The number of correct or incorrect responses to check for. | [parser/types.ts:1507](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1507) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/DeterministicInterruption.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/DeterministicInterruption.md
deleted file mode 100644
index 38d6c5516a..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/DeterministicInterruption.md
+++ /dev/null
@@ -1,54 +0,0 @@
-# DeterministicInterruption
-
-Defined in: [parser/types.ts:1337](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1337)
-
-The DeterministicInterruption interface is used to define an interruption that will be shown at a specific location in the block.
-
-For example, if you want to show an interruption after the second component in the block, you would set firstLocation to 2. If you want to show an interruption after every 3 components, you would set spacing to 3. If you want to show an interruption after the second component and then every 3 components, you would set firstLocation to 2 and spacing to 3.
-
-The components property is an array of the components that will be inserted at the location specified by firstLocation and spacing. These components should reference components in the StudyConfig.components section of the config.
-
-Here's an example of how to use the DeterministicInterruption:
-
-```json
-{
- "order": "fixed",
- "components": [
- "component1",
- "component2",
- "component3",
- "component4",
- "component5",
- "component6"
- ],
- "interruptions": [
- {
- "firstLocation": 2,
- "spacing": 3,
- "components": [
- "interruption1",
- "interruption2"
- ]
- }
- ]
-}
-```
-
-The resulting sequence array could be:
-
-```json
-[
- ["component1", "component2", "interruption1", "component3", "component4", "component5", "interruption2", "component6"],
- ["component1", "component2", "interruption1", "component3", "component4", "component5", "interruption2", "component6"],
- ["component1", "component2", "interruption1", "component3", "component4", "component5", "interruption2", "component6"],
- ...
-]
-```
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `components` | `string`[] | The components that are included in the interruption. These reference components in the StudyConfig.components section of the config. | [parser/types.ts:1343](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1343) |
-| `firstLocation` | `number` | The Location of the first instance of the interruption. If this is set to 2, the interruption will be shown after the second component (inserted at index 2). | [parser/types.ts:1339](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1339) |
-| `spacing` | `number` | The number of components between breaks. | [parser/types.ts:1341](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1341) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/DividerResponse.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/DividerResponse.md
deleted file mode 100644
index c461999e3a..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/DividerResponse.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# DividerResponse
-
-Defined in: [parser/types.ts:883](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L883)
-
-## Extends
-
-- `Omit`\<[`BaseResponse`](BaseResponse.md), `"prompt"` \| `"infoText"` \| `"secondaryText"` \| `"required"` \| `"requiredValue"` \| `"requiredLabel"` \| `"paramCapture"` \| `"hidden"` \| `"withDontKnow"`\>
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:377](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L377) |
-| `hidden?` | `undefined` | - | - | [parser/types.ts:893](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L893) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:349](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L349) |
-| `infoText?` | `undefined` | - | - | [parser/types.ts:887](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L887) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:359](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L359) |
-| `paramCapture?` | `undefined` | - | - | [parser/types.ts:892](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L892) |
-| `prompt?` | `undefined` | - | - | [parser/types.ts:886](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L886) |
-| `required?` | `undefined` | - | - | [parser/types.ts:889](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L889) |
-| `requiredLabel?` | `undefined` | - | - | [parser/types.ts:891](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L891) |
-| `requiredValue?` | `undefined` | - | - | [parser/types.ts:890](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L890) |
-| `secondaryText?` | `undefined` | - | - | [parser/types.ts:888](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L888) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:375](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L375) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:373](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L373) |
-| `type` | `"divider"` | - | - | [parser/types.ts:884](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L884) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:369](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L369) |
-| `withDontKnow?` | `undefined` | - | - | [parser/types.ts:894](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L894) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/DropdownResponse.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/DropdownResponse.md
deleted file mode 100644
index 2f22461d1f..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/DropdownResponse.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# DropdownResponse
-
-Defined in: [parser/types.ts:610](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L610)
-
-The DropdownResponse interface is used to define the properties of a dropdown response.
-DropdownResponses render as a select input with user specified options.
-```json
-{
- "id": "q-color",
- "prompt": "What is your favorite color?",
- "location": "aboveStimulus",
- "type": "dropdown",
- "default": "Blue",
- "placeholder": "Please choose your favorite color",
- "options": ["Red", "Blue"]
-}
-```
-
-Here's an example of a multiselect dropdown with minimum and maximum selections:
-
-```json
-{
- "id": "q-multiselect-dropdown",
- "prompt": "Select the fruits you like.",
- "location": "aboveStimulus",
- "type": "dropdown",
- "default": ["Banana", "Orange"],
- "placeholder": "Select your favorite fruits",
- "options": ["Apple", "Banana", "Cherry", "Grape", "Orange", "Strawberry", "Watermelon", "Pineapple"],
- "minSelections": 2,
- "maxSelections": 4
-}
-```
-
-## Extends
-
-- [`BaseResponse`](BaseResponse.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `string` \| `string`[] | The default value of the response. Use a string for single-select dropdowns and a string array for multiselect dropdowns. | - | [parser/types.ts:615](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L615) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:377](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L377) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:367](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L367) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:349](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L349) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:355](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L355) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:359](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L359) |
-| `maxSelections?` | `number` | The maximum number of selections that are required. This will make the dropdown a multiselect dropdown. | - | [parser/types.ts:621](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L621) |
-| `minSelections?` | `number` | The minimum number of selections that are required. This will make the dropdown a multiselect dropdown. | - | [parser/types.ts:619](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L619) |
-| `options` | (`string` \| [`StringOption`](StringOption.md))[] | The options that are displayed in the dropdown. | - | [parser/types.ts:617](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L617) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:365](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L365) |
-| `placeholder?` | `string` | The placeholder text that is displayed in the input. | - | [parser/types.ts:613](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L613) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:351](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L351) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:357](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L357) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:363](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L363) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:361](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L361) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:353](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L353) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:375](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L375) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:373](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L373) |
-| `type` | `"dropdown"` | - | - | [parser/types.ts:611](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L611) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:369](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L369) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:371](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L371) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/DynamicBlock.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/DynamicBlock.md
deleted file mode 100644
index 720a4f219c..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/DynamicBlock.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# DynamicBlock
-
-Defined in: [parser/types.ts:1576](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1576)
-
-The DynamicBlock interface is used to define a block where displayed components are controlled by a function. This is useful when you want to generate the sequence based on answers to previous questions or other factors.
-
-The functionPath property is a path to the function that generates the components. This should be a relative path from the src/public folder.
-
-Here's an example of how to use the DynamicBlock:
-
-```json
-{
- "id": "funcBlock",
- "order": "dynamic",
- "functionPath": "/assets/function.js",
- "parameters": {
- "param1": "value1",
- "param2": "value2"
- }
-}
-```
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `conditional?` | `boolean` | The conditional property shows the block only when the URL condition matches its `id`. | [parser/types.ts:1586](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1586) |
-| `functionPath` | `string` | The path to the function that generates the components. This should be a relative path from the src/public folder. | [parser/types.ts:1582](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1582) |
-| `id` | `string` | The id of the block. This is used to identify the block in the SkipConditions and is only required if you want to refer to the whole block in the condition.to property. | [parser/types.ts:1578](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1578) |
-| `order` | `"dynamic"` | The type of order. This can be random (pure random), latinSquare (random with some guarantees), or fixed. | [parser/types.ts:1580](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1580) |
-| `parameters?` | `Record`\<`string`, `unknown`\> | The parameters that are passed to the function. These can be used within your function to render different things. | [parser/types.ts:1584](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1584) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/GlobalConfig.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/GlobalConfig.md
deleted file mode 100644
index 50b9c152ab..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/GlobalConfig.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# GlobalConfig
-
-Defined in: [parser/types.ts:8](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L8)
-
-The GlobalConfig is used to generate the list of available studies in the UI.
-This list is displayed on the landing page when running the app.
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `$schema` | `string` | A required json schema property. This should point to the GitHub link for the version of the schema you would like. See examples in the public folder for more information. | [parser/types.ts:10](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L10) |
-| `configs` | `object` | A required property that specifies the options for the configList property. | [parser/types.ts:12](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L12) |
-| `configsList` | `string`[] | A required property that is used to generate the list of available studies in the UI. This list is displayed on the landing page when running the app. | [parser/types.ts:22](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L22) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/ImageComponent.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/ImageComponent.md
deleted file mode 100644
index b9df8ddbf4..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/ImageComponent.md
+++ /dev/null
@@ -1,58 +0,0 @@
-# ImageComponent
-
-Defined in: [parser/types.ts:1096](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1096)
-
-The ImageComponent interface is used to define the properties of an image component. This component is used to render an image with optional styling.
-
-For example, to render an image with a path of `path/to/study/assets/image.jpg` and a max width of 50%, you would use the following snippet:
-```json
-{
- "type": "image",
- "path": "/assets/image.jpg",
- "style": {
- "maxWidth": "50%"
- }
-}
-```
-
-## Extends
-
-- [`BaseIndividualComponent`](BaseIndividualComponent.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:993](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L993) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L997) |
-| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:953](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L953) |
-| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:957](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L957) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1001) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:973](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L973) |
-| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:969](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L969) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:971](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L971) |
-| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:955](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L955) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:983](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L983) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:981](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L981) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:979](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L979) |
-| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:977](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L977) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:975](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L975) |
-| `path` | `string` | The path to the image. This could be a relative path from the public folder or a url to an external image. | - | [parser/types.ts:1099](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1099) |
-| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:985](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L985) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:987](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L987) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:989](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L989) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:995](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L995) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:999](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L999) |
-| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:949](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L949) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1003) |
-| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1007) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:965](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L965) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:967](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L967) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:963](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L963) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1011) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1009) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:991](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L991) |
-| `type` | `"image"` | - | - | [parser/types.ts:1097](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1097) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1005) |
-| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:959](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L959) |
-| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:961](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L961) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/IndividualComponentAllResponsesCondition.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/IndividualComponentAllResponsesCondition.md
deleted file mode 100644
index bf9a63a29c..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/IndividualComponentAllResponsesCondition.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# IndividualComponentAllResponsesCondition
-
-Defined in: [parser/types.ts:1467](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1467)
-
-The IndividualComponentAllResponsesCondition interface is used to define a SkipCondition based on all answers to a specific component. The skip logic will be checked for every component in the block that has the specified name.
-
-:::info
-If you need to check all instances of a repeated component, you should use the RepeatedComponentBlockCondition.
-:::
-
-Here's an example of how to use the IndividualComponentAllResponsesCondition:
-
-```json
-{
- ...
- "skip": [
- {
- "name": "attentionCheck",
- "check": "responses",
- "to": "end"
- }
- ]
- ...
-}
-```
-
-In this example, if all responses to the component with the ID "attentionCheck" are correct, the participant will be redirected to the end of the study. If any response is incorrect, the participant will continue to the next component in the sequence.
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `check` | `"responses"` | The check we'll perform. | [parser/types.ts:1471](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1471) |
-| `name` | `string` | The name of the component to check. | [parser/types.ts:1469](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1469) |
-| `to` | `string` | The id of the component or block to skip to | [parser/types.ts:1473](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1473) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/IndividualComponentSingleResponseCondition.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/IndividualComponentSingleResponseCondition.md
deleted file mode 100644
index d3ee3d89ac..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/IndividualComponentSingleResponseCondition.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# IndividualComponentSingleResponseCondition
-
-Defined in: [parser/types.ts:1428](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1428)
-
-The IndividualComponentSingleResponseCondition interface is used to define a SkipCondition based on a single answer to a specific component. The skip logic will be checked for every component in the block that has the specified name.
-
-:::info
-If you need to check all instances of a repeated component, you should use the RepeatedComponentBlockCondition.
-:::
-
-For example, if you want to skip to a different component based on a response to a specific component, you would use the IndividualComponentSingleResponseCondition. Here's an example of how to use the IndividualComponentSingleResponseCondition:
-
-```json
-{
- ...
- "skip": [
- {
- "name": "attentionCheck",
- "check": "response",
- "responseId": "attentionCheckResponse",
- "value": "the right answer",
- "comparison": "equal",
- "to": "end"
- }
- ]
- ...
-}
-```
-
-In this example, we assign our skip logic to the component whose ID is "attentionCheck". If the answer given to the response "attentionCheckResponse" is equal to "the right answer", then the user will be redirected to the end of the study. If the response is _not_ equal to "the right answer", then the participant will continue to the next component in the sequence.
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `check` | `"response"` | The check we'll perform. | [parser/types.ts:1432](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1432) |
-| `comparison` | `"equal"` \| `"notEqual"` | The comparison to use. | [parser/types.ts:1438](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1438) |
-| `name` | `string` | The name of the component to check. | [parser/types.ts:1430](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1430) |
-| `responseId` | `string` | The response id to check. | [parser/types.ts:1434](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1434) |
-| `to` | `string` | The id of the component or block to skip to | [parser/types.ts:1440](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1440) |
-| `value` | `string` \| `number` | The value to check. | [parser/types.ts:1436](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1436) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/LibraryConfig.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/LibraryConfig.md
deleted file mode 100644
index 078f87e823..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/LibraryConfig.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# LibraryConfig
-
-Defined in: [parser/types.ts:1822](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1822)
-
-LibraryConfig is used to define the properties of a library configuration. This is a JSON object with three main components: baseComponents, components, and the sequences. Libraries are useful for defining components and sequences of these components that are to be reused across multiple studies. We (the reVISit team) provide several libraries that can be used in your study configurations. Check the public/libraries folder in the reVISit-studies repository for available libraries. We also plan to accept community contributions for libraries. If you have a library that you think would be useful for others, please reach out to us. We would love to include it in our repository.
-
-Below is the general template that should be followed when constructing a Library configuration file.
-
-```json
-{
- "$schema": "https://raw.githubusercontent.com/revisit-studies/study/v2.4.1/src/parser/LibraryConfigSchema.json",
- "baseComponents": {
- // BaseComponents here are defined exactly as is in the StudyConfig
- },
- "components": {
- // Components here are defined exactly as is in the StudyConfig
- },
- "sequences": {
- // Sequences here are defined as "key": "value" pairs where the key is the name of the sequence and the value is a ComponentBlock, just like in the StudyConfig
- }
-}
-```
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `$schema` | `string` | A required json schema property. This should point to the github link for the version of the schema you would like. The `$schema` line is used to verify the schema. If you're using VSCode (or other similar IDEs), including this line will allow for autocomplete and helpful suggestions when writing the study configuration. See examples for more information | [parser/types.ts:1824](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1824) |
-| `additionalDescription?` | `string` | Additional description of the library. It accepts markdown formatting. | [parser/types.ts:1832](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1832) |
-| `baseComponents?` | [`BaseComponents`](../type-aliases/BaseComponents.md) | The base components that are used in the study. These components can be used to template other components. See [BaseComponents](../../type-aliases/BaseComponents) for more information. | [parser/types.ts:1840](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1840) |
-| `components` | `Record`\<`string`, [`IndividualComponent`](../type-aliases/IndividualComponent.md) \| [`InheritedComponent`](../type-aliases/InheritedComponent.md)\> | The components that are used in the study. They must be fully defined here with all properties. Some properties may be inherited from baseComponents. | [parser/types.ts:1828](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1828) |
-| `description` | `string` | A description of the library. | [parser/types.ts:1826](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1826) |
-| `doi?` | `string` | The DOI of the paper where the content of the library is based on. | [parser/types.ts:1836](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1836) |
-| `externalLink?` | `string` | The external link to the paper/website where the content of the library is based on. | [parser/types.ts:1838](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1838) |
-| `reference?` | `string` | The reference to the paper where the content of the library is based on. | [parser/types.ts:1834](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1834) |
-| `sequences` | `Record`\<`string`, [`StudyConfig`](StudyConfig.md)\[`"sequence"`\]\> | The order of the components in the study. This might include some randomness. | [parser/types.ts:1830](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1830) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/LikertResponse.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/LikertResponse.md
deleted file mode 100644
index 5ccdc15b99..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/LikertResponse.md
+++ /dev/null
@@ -1,57 +0,0 @@
-# LikertResponse
-
-Defined in: [parser/types.ts:477](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L477)
-
-The LikertResponse interface is used to define the properties of a likert response.
-LikertResponses render as radio buttons with a user specified number of options, which can be controlled through the numItems. For example, `"numItems": 5` will render 5 radio buttons, and `"numItems": 7` will render 7 radio buttons.
-LikertResponses can also have a description, and left and right labels.
-The left and right labels are used to label the left and right ends of the likert scale with values such as 'Strongly Disagree' and 'Strongly Agree'.
-
-Example for a five-point Likert Scale:
-```json
-{
- "id": "q-satisfaction",
- "prompt": "Rate your satisfaction from 1 (not enjoyable) to 5 (very enjoyable).",
- "location": "aboveStimulus",
- "type": "likert",
- "leftLabel": "Not Enjoyable",
- "rightLabel": "Very Enjoyable",
- "labelLocation": "inline",
- "numItems": 5,
- "default": 4,
- "start": 1,
- "spacing": 1
-}
-```
-
-## Extends
-
-- [`BaseResponse`](BaseResponse.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `string` \| `number` | The default value of the response. Specify a rendered option value as a number or string (for example `4` or `"4"`). | - | [parser/types.ts:482](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L482) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:377](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L377) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:367](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L367) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:349](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L349) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:355](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L355) |
-| `labelLocation?` | `"above"` \| `"inline"` \| `"below"` | The location of the labels. Defaults to inline. | - | [parser/types.ts:492](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L492) |
-| `leftLabel?` | `string` | The left label of the likert scale. E.g Strongly Disagree | - | [parser/types.ts:488](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L488) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:359](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L359) |
-| `numItems` | `number` | The number of options to render. | - | [parser/types.ts:480](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L480) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:365](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L365) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:351](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L351) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:357](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L357) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:363](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L363) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:361](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L361) |
-| `rightLabel?` | `string` | The right label of the likert scale. E.g Strongly Agree | - | [parser/types.ts:490](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L490) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:353](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L353) |
-| `spacing?` | `number` | The spacing between the options. Defaults to 1. | - | [parser/types.ts:486](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L486) |
-| `start?` | `number` | The starting value of the likert scale. Defaults to 1. | - | [parser/types.ts:484](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L484) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:375](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L375) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:373](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L373) |
-| `type` | `"likert"` | - | - | [parser/types.ts:478](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L478) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:369](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L369) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:371](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L371) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/LongTextResponse.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/LongTextResponse.md
deleted file mode 100644
index 80c35b8d9c..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/LongTextResponse.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# LongTextResponse
-
-Defined in: [parser/types.ts:446](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L446)
-
-The LongTextResponse interface is used to define the properties of a long text response.
-LongTextResponses render as a text area that accepts any text and can optionally have a placeholder.
-```json
-{
- "id": "q-name",
- "prompt": "What is your first name?",
- "location": "aboveStimulus",
- "type": "longText",
- "default": "I enjoyed this study because...",
- "placeholder": "Please enter your first name"
-}
-```
-
-## Extends
-
-- [`BaseResponse`](BaseResponse.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `string` | The default value of the response. Specify a string such as `"I enjoyed this study because..."`. | - | [parser/types.ts:451](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L451) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:377](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L377) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:367](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L367) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:349](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L349) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:355](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L355) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:359](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L359) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:365](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L365) |
-| `placeholder?` | `string` | The placeholder text that is displayed in the input. | - | [parser/types.ts:449](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L449) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:351](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L351) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:357](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L357) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:363](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L363) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:361](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L361) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:353](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L353) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:375](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L375) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:373](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L373) |
-| `type` | `"longText"` | - | - | [parser/types.ts:447](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L447) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:369](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L369) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:371](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L371) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/MarkdownComponent.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/MarkdownComponent.md
deleted file mode 100644
index 87c7fa22f5..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/MarkdownComponent.md
+++ /dev/null
@@ -1,55 +0,0 @@
-# MarkdownComponent
-
-Defined in: [parser/types.ts:1025](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1025)
-
-The MarkdownComponent interface is used to define the properties of a markdown component. The components can be used to render many different things, such as consent forms, instructions, and debriefs. Additionally, you can use the markdown component to render images, videos, and other media, with supporting text. Markdown components can have responses (e.g. in a consent form), or no responses (e.g. in a help text file). Here's an example with no responses for a simple help text file:
-
-```json
-{
- "type": "markdown",
- "path": "/assets/help.md",
- "response": []
-}
-```
-
-## Extends
-
-- [`BaseIndividualComponent`](BaseIndividualComponent.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:993](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L993) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L997) |
-| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:953](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L953) |
-| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:957](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L957) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1001) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:973](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L973) |
-| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:969](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L969) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:971](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L971) |
-| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:955](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L955) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:983](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L983) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:981](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L981) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:979](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L979) |
-| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:977](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L977) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:975](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L975) |
-| `path` | `string` | The path to the markdown file. This should be a relative path from the public folder. | - | [parser/types.ts:1028](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1028) |
-| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:985](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L985) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:987](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L987) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:989](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L989) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:995](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L995) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:999](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L999) |
-| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:949](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L949) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1003) |
-| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1007) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:965](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L965) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:967](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L967) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:963](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L963) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1011) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1009) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:991](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L991) |
-| `type` | `"markdown"` | - | - | [parser/types.ts:1026](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1026) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1005) |
-| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:959](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L959) |
-| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:961](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L961) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/MatrixCheckboxResponse.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/MatrixCheckboxResponse.md
deleted file mode 100644
index 60302e8052..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/MatrixCheckboxResponse.md
+++ /dev/null
@@ -1,65 +0,0 @@
-# MatrixCheckboxResponse
-
-Defined in: [parser/types.ts:571](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L571)
-
-The MatrixCheckboxResponse interface defines a matrix where each row can select multiple options.
-`questionOptions` are rendered as rows, and `answerOptions` are rendered as columns.
-Defaults are specified per-row as arrays of selected answer option values.
-
-Example using custom columns (`answerOptions`):
-```json
-{
- "id": "multi-custom",
- "prompt": "Which categories do the following items belong to?",
- "location": "aboveStimulus",
- "type": "matrix-checkbox",
- "answerOptions": [
- "Has Legs",
- "Has Wings",
- "Can Swim"
- ],
- "questionOptions": [
- "Dog",
- "Snake",
- "Eagle",
- "Salmon",
- "Platypus"
- ],
- "default": {
- "Dog": ["Has Legs"],
- "Snake": [],
- "Eagle": ["Has Wings"],
- "Salmon": ["Can Swim"],
- "Platypus": ["Has Legs", "Can Swim"]
- }
-}
-```
-
-## Extends
-
-- `BaseMatrixResponse`
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `answerOptions` | `"likely5"` \| `"likely7"` \| `"satisfaction5"` \| `"satisfaction7"` \| (`string` \| [`StringOption`](StringOption.md))[] | The answer options (columns). We provide some shortcuts for a likelihood scale (ranging from highly unlikely to highly likely) and a satisfaction scale (ranging from highly unsatisfied to highly satisfied) with either 5 or 7 options to choose from. | `BaseMatrixResponse.answerOptions` | [parser/types.ts:497](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L497) |
-| `default?` | `Record`\<`string`, `string`[]\> | The default value of the response by question key. Provide an object where each key is a question value and each value is an array of selected answer option values. | - | [parser/types.ts:574](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L574) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | `BaseMatrixResponse.excludeFromRandomization` | [parser/types.ts:377](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L377) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | `BaseMatrixResponse.hidden` | [parser/types.ts:367](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L367) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | `BaseMatrixResponse.id` | [parser/types.ts:349](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L349) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | `BaseMatrixResponse.infoText` | [parser/types.ts:355](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L355) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | `BaseMatrixResponse.location` | [parser/types.ts:359](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L359) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | `BaseMatrixResponse.paramCapture` | [parser/types.ts:365](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L365) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | `BaseMatrixResponse.prompt` | [parser/types.ts:351](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L351) |
-| `questionOptions` | (`string` \| [`StringOption`](StringOption.md))[] | The question options (rows) are the prompts for each response you'd like to record. | `BaseMatrixResponse.questionOptions` | [parser/types.ts:499](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L499) |
-| `questionOrder?` | `"random"` \| `"fixed"` | The order in which the questions are displayed. Defaults to fixed. | `BaseMatrixResponse.questionOrder` | [parser/types.ts:501](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L501) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | `BaseMatrixResponse.required` | [parser/types.ts:357](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L357) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | `BaseMatrixResponse.requiredLabel` | [parser/types.ts:363](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L363) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | `BaseMatrixResponse.requiredValue` | [parser/types.ts:361](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L361) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | `BaseMatrixResponse.secondaryText` | [parser/types.ts:353](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L353) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | `BaseMatrixResponse.style` | [parser/types.ts:375](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L375) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | `BaseMatrixResponse.stylesheetPath` | [parser/types.ts:373](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L373) |
-| `type` | `"matrix-checkbox"` | - | - | [parser/types.ts:572](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L572) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | `BaseMatrixResponse.withDivider` | [parser/types.ts:369](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L369) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | `BaseMatrixResponse.withDontKnow` | [parser/types.ts:371](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L371) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/MatrixRadioResponse.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/MatrixRadioResponse.md
deleted file mode 100644
index cfe78073d7..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/MatrixRadioResponse.md
+++ /dev/null
@@ -1,58 +0,0 @@
-# MatrixRadioResponse
-
-Defined in: [parser/types.ts:531](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L531)
-
-The MatrixRadioResponse interface defines a matrix where each row accepts exactly one selected option.
-`questionOptions` are rendered as rows, and `answerOptions` are rendered as columns.
-`answerOptions` can be custom labels/values or one of the built-in shortcuts: `satisfaction5`, `satisfaction7`, `likely5`, `likely7`.
-
-Example:
-```json
-{
- "id": "multi-satisfaction",
- "prompt": "Rate your satisfaction from 1 (not enjoyable) to 5 (very enjoyable) for the following items.",
- "location": "aboveStimulus",
- "type": "matrix-radio",
- "answerOptions": "satisfaction5",
- "questionOptions": [
- "The tool we created",
- "The technique we developed",
- "The authors of the tools"
- ],
- "default": {
- "The tool we created": "Highly Satisfied",
- "The technique we developed": "Satisfied",
- "The authors of the tools": "Neutral"
- },
- "questionOrder": "random"
-}
-```
-
-## Extends
-
-- `BaseMatrixResponse`
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `answerOptions` | `"likely5"` \| `"likely7"` \| `"satisfaction5"` \| `"satisfaction7"` \| (`string` \| [`StringOption`](StringOption.md))[] | The answer options (columns). We provide some shortcuts for a likelihood scale (ranging from highly unlikely to highly likely) and a satisfaction scale (ranging from highly unsatisfied to highly satisfied) with either 5 or 7 options to choose from. | `BaseMatrixResponse.answerOptions` | [parser/types.ts:497](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L497) |
-| `default?` | `Record`\<`string`, `string`\> | The default value of the response by question key. Provide an object where each key is a question value and each value is one answer option value. | - | [parser/types.ts:534](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L534) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | `BaseMatrixResponse.excludeFromRandomization` | [parser/types.ts:377](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L377) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | `BaseMatrixResponse.hidden` | [parser/types.ts:367](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L367) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | `BaseMatrixResponse.id` | [parser/types.ts:349](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L349) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | `BaseMatrixResponse.infoText` | [parser/types.ts:355](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L355) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | `BaseMatrixResponse.location` | [parser/types.ts:359](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L359) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | `BaseMatrixResponse.paramCapture` | [parser/types.ts:365](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L365) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | `BaseMatrixResponse.prompt` | [parser/types.ts:351](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L351) |
-| `questionOptions` | (`string` \| [`StringOption`](StringOption.md))[] | The question options (rows) are the prompts for each response you'd like to record. | `BaseMatrixResponse.questionOptions` | [parser/types.ts:499](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L499) |
-| `questionOrder?` | `"random"` \| `"fixed"` | The order in which the questions are displayed. Defaults to fixed. | `BaseMatrixResponse.questionOrder` | [parser/types.ts:501](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L501) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | `BaseMatrixResponse.required` | [parser/types.ts:357](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L357) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | `BaseMatrixResponse.requiredLabel` | [parser/types.ts:363](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L363) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | `BaseMatrixResponse.requiredValue` | [parser/types.ts:361](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L361) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | `BaseMatrixResponse.secondaryText` | [parser/types.ts:353](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L353) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | `BaseMatrixResponse.style` | [parser/types.ts:375](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L375) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | `BaseMatrixResponse.stylesheetPath` | [parser/types.ts:373](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L373) |
-| `type` | `"matrix-radio"` | - | - | [parser/types.ts:532](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L532) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | `BaseMatrixResponse.withDivider` | [parser/types.ts:369](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L369) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | `BaseMatrixResponse.withDontKnow` | [parser/types.ts:371](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L371) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/MatrixResponse.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/MatrixResponse.md
deleted file mode 100644
index f967f863cc..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/MatrixResponse.md
+++ /dev/null
@@ -1,76 +0,0 @@
-# MatrixResponse
-
-Defined in: [parser/types.ts:531](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L531)
-
-The MatrixResponse interface is used to define the properties of a matrix radio or matrix checkbox response.
-Question options are rendered as rows of the matrix, each row containing its own radio/checkbox group.
-Answer options are rendered as column headers of the matrix. These can be customized by passing in the custom strings into the answer options. Alternatively, `answerOptions` can be set to one of the following custom strings: 'satisfaction5','satisfaction7', 'likely5', 'likely7'. This will automatically generate the appropriate headers for the matrix.
-
-Example for a 5-scale satisfaction matrix with three questions:
-
-```js
-{
- "id": "multi-satisfaction",
- "prompt": "Rate your satisfaction from 1 (not enjoyable) to 5 (very enjoyable) for the following items.",
- "location": "aboveStimulus",
- "type": "matrix-radio",
- "answerOptions": "satisfaction5",
- "questionOptions": [
- "The tool we created",
- "The technique we developed",
- "The authors of the tools"
- ]
-}
-```
-
-Here's an example using custom columns (answerOptions):
-
-```js
-{
- "id": "multi-custom",
- "prompt": "Which categories do the following items belong to?",
- "location": "aboveStimulus",
- "type": "matrix-checkbox",
- "answerOptions": [
- "Has Legs",
- "Has Wings",
- "Can Swim"
- ],
- "questionOptions": [
- "Dog",
- "Snake",
- "Eagle",
- "Salmon",
- "Platypus"
- ]
-
-}
-```
-
-## Extends
-
-- [`BaseResponse`](BaseResponse.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `answerOptions` | `"likely5"` \| `"likely7"` \| `"satisfaction5"` \| `"satisfaction7"` \| (`string` \| [`StringOption`](StringOption.md))[] | The answer options (columns). We provide some shortcuts for a likelihood scale (ranging from highly unlikely to highly likely) and a satisfaction scale (ranging from highly unsatisfied to highly satisfied) with either 5 or 7 options to choose from. | - | [parser/types.ts:534](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L534) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the responseOrder randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:375](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L375) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:365](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L365) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:347](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L347) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:353](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L353) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:357](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L357) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer uiConfig.urlParticipantIdParam if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:363](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L363) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:349](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L349) |
-| `questionOptions` | (`string` \| [`StringOption`](StringOption.md))[] | The question options (rows) are the prompts for each response you'd like to record. | - | [parser/types.ts:536](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L536) |
-| `questionOrder?` | `"random"` \| `"fixed"` | The order in which the questions are displayed. Defaults to fixed. | - | [parser/types.ts:538](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L538) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:355](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L355) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:361](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L361) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:359](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L359) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:351](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L351) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:373](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L373) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:371](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L371) |
-| `type` | `"matrix-radio"` \| `"matrix-checkbox"` | - | - | [parser/types.ts:532](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L532) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or uiConfig. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:367](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L367) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:369](https://github.com/revisit-studies/study/blob/317436dc2065f4bc80347c4bd7250d4444518b6d/src/parser/types.ts#L369) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/NumberOption.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/NumberOption.md
deleted file mode 100644
index 192deb19e3..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/NumberOption.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# NumberOption
-
-Defined in: [parser/types.ts:317](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L317)
-
-The NumberOption interface is used to define the options for a slider response.
-The label is the text that is displayed to the user, and the value is the value that is stored in the data file.
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `label` | `string` | The label displayed to participants. | [parser/types.ts:319](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L319) |
-| `value` | `number` | The value stored in the participant's data. | [parser/types.ts:321](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L321) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/NumericalResponse.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/NumericalResponse.md
deleted file mode 100644
index 527844f6bf..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/NumericalResponse.md
+++ /dev/null
@@ -1,47 +0,0 @@
-# NumericalResponse
-
-Defined in: [parser/types.ts:396](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L396)
-
-The NumericalResponse interface is used to define the properties of a numerical response.
-NumericalResponses render as a text input that only accepts numbers, and can optionally have a min and max value, or a placeholder.
-```json
-{
- "id": "q-numerical",
- "prompt": "Numerical example",
- "location": "aboveStimulus",
- "type": "numerical",
- "default": 25,
- "placeholder": "Enter your age, range from 0 - 120",
- "max": 120,
- "min": 0
-}
-```
-
-## Extends
-
-- [`BaseResponse`](BaseResponse.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `number` | The default value of the response. Specify a numeric value such as `25` or `3.14`. | - | [parser/types.ts:401](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L401) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:377](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L377) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:367](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L367) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:349](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L349) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:355](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L355) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:359](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L359) |
-| `max?` | `number` | The maximum value that is accepted in the input. | - | [parser/types.ts:405](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L405) |
-| `min?` | `number` | The minimum value that is accepted in the input. | - | [parser/types.ts:403](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L403) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:365](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L365) |
-| `placeholder?` | `string` | The placeholder text that is displayed in the input. | - | [parser/types.ts:399](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L399) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:351](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L351) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:357](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L357) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:363](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L363) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:361](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L361) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:353](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L353) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:375](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L375) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:373](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L373) |
-| `type` | `"numerical"` | - | - | [parser/types.ts:397](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L397) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:369](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L369) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:371](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L371) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/Option.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/Option.md
deleted file mode 100644
index 709d5cf7b1..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/Option.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# Option
-
-The Option interface is used to define the options for a dropdown, slider, radio, or checkbox response.
-The label is the text that is displayed to the user, and the value is the value that is stored in the data file.
-The Option interface is used in the Response interface.
-
-## Properties
-
-| Property | Type | Description |
-| :------ | :------ | :------ |
-| `label` | `string` | The label displayed to participants. |
-| `value` | `string` \| `number` | The value stored in the participant's data. |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/ParsedStringOption.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/ParsedStringOption.md
deleted file mode 100644
index cbd34d1874..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/ParsedStringOption.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# ParsedStringOption
-
-Defined in: [parser/types.ts:338](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L338)
-
-StringOption normalized to always include a value.
-
-## Extends
-
-- `Omit`\<[`StringOption`](StringOption.md), `"value"`\>
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the option. This does not accept markdown. | [`StringOption`](StringOption.md).[`infoText`](StringOption.md#infotext) | [parser/types.ts:334](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L334) |
-| `label` | `string` | The label displayed to participants. Markdown is supported. | [`StringOption`](StringOption.md).[`label`](StringOption.md#label) | [parser/types.ts:330](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L330) |
-| `value` | `string` | - | - | [parser/types.ts:339](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L339) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/ParticipantData.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/ParticipantData.md
deleted file mode 100644
index 49320edd25..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/ParticipantData.md
+++ /dev/null
@@ -1,66 +0,0 @@
-# ParticipantData
-
-Defined in: [storage/types.ts:49](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/storage/types.ts#L49)
-
-The ParticipantData is a JSON object that contains all of the data for a single participant in your study. In storage, participant records and configuration records are often collected together in a list, where each element refers either to a participant's data or to a configuration. While in many cases there is only one configuration per study, the study creator is allowed to change the configuration file after the study has already been completed by other participants. The data for each participant will have a `participantConfigHash` which refers to a particular configuration that is also stored in this list.
-
-Below we have an example of a single participant's data record.
-```json
-{
- "participantId": ,
- "participantConfigHash": ,
- "sequence": {
- ...
- },
- "answers": {
- ...
- },
- "searchParams": {
- ...
- }
-}
-```
-Each key in answer will be labeled the same as the response component that it refers to. The sequence shows the order that the participant saw each component (since these may be different for each participant if the configuration sequence has some randomization). This answer will contain information such as the start time, the end time, and all of the window events. See the example below.
-
-```json
-"bar-chart-1_1": {
- "answer": {
- "barChart": [
- 1.3
- ]
- },
- "startTime": 1711641174858,
- "endTime": 1711641178836,
- "provenanceGraph":{
- ...
- },
- "windowEvents": [
- ...
- ]
-}
-```
-The keys of this object are the names of the components with an additional underscore and number appended to the end. This is done so that the study creator can discern between not only the components but also between the various instances of the same component when necessary. All times are in **epoch milliseconds**.
-
-:::info
-The `"provenanceGraph"` key will only exist if the component is a React component and if it is utilizing Trrack. See [here](../StoredAnswer) for more details.
-:::
-
-We can see at a high level that we are given the answer that the user submitted, the start time for the component, and the end time. In addition to this, we have a list of window events. You can find more information about the StoredAnswer object [here](../StoredAnswer).
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `answers` | `Record`\<`string`, [`StoredAnswer`](StoredAnswer.md)\> | Object whose keys are the component names and values are StoredAnswer objects. | [storage/types.ts:59](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/storage/types.ts#L59) |
-| `completed` | `boolean` | Whether the participant has completed the study. | [storage/types.ts:65](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/storage/types.ts#L65) |
-| `conditions?` | `string`[] | The study condition(s) the participant was assigned to. Derived from the URL `condition` query parameter. | [storage/types.ts:76](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/storage/types.ts#L76) |
-| `createdTime?` | `number` | Time that the participant registered for the study in epoch milliseconds. | [storage/types.ts:78](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/storage/types.ts#L78) |
-| `metadata` | [`ParticipantMetadata`](ParticipantMetadata.md) | Metadata of a participant's browser, resolution, language, and IP. | [storage/types.ts:63](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/storage/types.ts#L63) |
-| `participantConfigHash` | `string` | Unique ID corresponding to the Configuration that the participant received. | [storage/types.ts:53](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/storage/types.ts#L53) |
-| `participantId` | `string` | Unique ID associated with the participant | [storage/types.ts:51](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/storage/types.ts#L51) |
-| `participantIndex` | `number` | Index of the participant in the study. | [storage/types.ts:57](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/storage/types.ts#L57) |
-| `participantTags` | `string`[] | The component blocks that the participant entered. | [storage/types.ts:72](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/storage/types.ts#L72) |
-| `rejected` | `false` \| \{ `reason`: `string`; `timestamp`: `number`; \} | Whether the participant has been rejected and the reason. | [storage/types.ts:67](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/storage/types.ts#L67) |
-| `searchParams` | `Record`\<`string`, `string`\> | Query parameters of the URL used to enter the study. | [storage/types.ts:61](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/storage/types.ts#L61) |
-| `sequence` | `Sequence` | Sequence of components that the participant received. This is an internal data type and is compiled from the ComponentBlocks in the StudyConfig sequence. | [storage/types.ts:55](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/storage/types.ts#L55) |
-| `stage` | `string` | The stage of the participant in the study. | [storage/types.ts:74](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/storage/types.ts#L74) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/ParticipantMetadata.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/ParticipantMetadata.md
deleted file mode 100644
index ce91a30423..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/ParticipantMetadata.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# ParticipantMetadata
-
-Defined in: [store/types.ts:11](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L11)
-
-The ParticipantMetadata object contains metadata about the participant. This includes the user agent, resolution, language, and IP address. This object is used to store information about the participant that is not directly related to the study itself.
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `ip` | `string` \| `null` | The IP address of the participant. | [store/types.ts:19](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L19) |
-| `language` | `string` | The language of the participant's browser. | [store/types.ts:17](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L17) |
-| `resolution` | `Record`\<`string`, `string` \| `number`\> | The resolution of the participant's screen. This is an object with two keys, "width" and "height". The values are the width and height of the participant's screen in pixels. | [store/types.ts:15](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L15) |
-| `userAgent` | `string` | The user agent of the participant. This is a string that contains information about the participant's browser and operating system. | [store/types.ts:13](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L13) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/QuestionnaireComponent.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/QuestionnaireComponent.md
deleted file mode 100644
index 10bd03ce6d..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/QuestionnaireComponent.md
+++ /dev/null
@@ -1,61 +0,0 @@
-# QuestionnaireComponent
-
-Defined in: [parser/types.ts:1184](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1184)
-
-A QuestionnaireComponent is used to render simple questions that require a response. The main use case of this component type is to ask participants questions when you don't need to render a stimulus. Please note, that even though we're not using a stimulus, the responses still require a `location`. For example this could be used to collect demographic information from a participant using the following snippet:
-
-```json
-{
- "type": "questionnaire",
- "response": [
- {
- "id": "gender",
- "prompt": "Gender:",
- "location": "belowStimulus",
- "type": "checkbox",
- "options": ["Man", "Woman", "Genderqueer", "Third-gender", ...]
- }
- ]
-}
-```
-
-## Extends
-
-- [`BaseIndividualComponent`](BaseIndividualComponent.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:993](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L993) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L997) |
-| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:953](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L953) |
-| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:957](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L957) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1001) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:973](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L973) |
-| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:969](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L969) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:971](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L971) |
-| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:955](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L955) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:983](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L983) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:981](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L981) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:979](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L979) |
-| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:977](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L977) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:975](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L975) |
-| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:985](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L985) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:987](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L987) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:989](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L989) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:995](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L995) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:999](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L999) |
-| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:949](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L949) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1003) |
-| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1007) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:965](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L965) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:967](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L967) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:963](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L963) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1011) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1009) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:991](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L991) |
-| `type` | `"questionnaire"` | - | - | [parser/types.ts:1185](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1185) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1005) |
-| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:959](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L959) |
-| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:961](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L961) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/RadioResponse.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/RadioResponse.md
deleted file mode 100644
index e4f4df388a..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/RadioResponse.md
+++ /dev/null
@@ -1,55 +0,0 @@
-# RadioResponse
-
-Defined in: [parser/types.ts:693](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L693)
-
-The RadioResponse interface is used to define the properties of a radio response. Radios have only one allowable selection.
-RadioResponses render as a radio input with user specified options, and optionally left and right labels.
-```json
-{
- "id": "q-radio",
- "prompt": "Radio button example",
- "location": "aboveStimulus",
- "type": "radio",
- "options": ["Option 1", "Option 2", "Option 3"],
- "default": "Option 2",
- "optionOrder": "random",
- "leftLabel": "Left",
- "rightLabel": "Right",
- "labelLocation": "inline",
- "horizontal": true,
- "withOther": true
-}
-```
-
-## Extends
-
-- [`BaseResponse`](BaseResponse.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `string` | The default value of the response. Specify one option value as a string. | - | [parser/types.ts:698](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L698) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:377](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L377) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:367](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L367) |
-| `horizontal?` | `boolean` | Whether to render the radio buttons horizontally. Defaults to false, so they render horizontally. | - | [parser/types.ts:708](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L708) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:349](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L349) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:355](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L355) |
-| `labelLocation?` | `"above"` \| `"inline"` \| `"below"` | The location of the labels. This only works when horizontal is true. Defaults to inline. | - | [parser/types.ts:706](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L706) |
-| `leftLabel?` | `string` | The left label of the radio group. Used in Likert scales for example | - | [parser/types.ts:702](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L702) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:359](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L359) |
-| `optionOrder?` | `"random"` \| `"fixed"` | The order in which the radio buttons are displayed. Defaults to fixed. | - | [parser/types.ts:700](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L700) |
-| `options` | (`string` \| [`StringOption`](StringOption.md))[] | The options that are displayed as checkboxes, provided as an array of objects, with label and value fields. | - | [parser/types.ts:696](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L696) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:365](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L365) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:351](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L351) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:357](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L357) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:363](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L363) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:361](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L361) |
-| `rightLabel?` | `string` | The right label of the radio group. Used in Likert scales for example | - | [parser/types.ts:704](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L704) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:353](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L353) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:375](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L375) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:373](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L373) |
-| `type` | `"radio"` | - | - | [parser/types.ts:694](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L694) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:369](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L369) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:371](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L371) |
-| `withOther?` | `boolean` | Whether to render the radios with an "other" option. | - | [parser/types.ts:710](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L710) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/RandomInterruption.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/RandomInterruption.md
deleted file mode 100644
index 3438b740f3..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/RandomInterruption.md
+++ /dev/null
@@ -1,54 +0,0 @@
-# RandomInterruption
-
-Defined in: [parser/types.ts:1389](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1389)
-
-The RandomInterruption interface is used to define an interruption that will be shown randomly in the block.
-
-For example, if you want to show a single interruption randomly in the block, you would set `"spacing"` to "random" and `"numInterruptions"` to 1. If you want to show 3 interruptions randomly in the block, you would set `"spacing"` to "random" and `"numInterruptions"` to 3.
-
-The components property is an array of the components that will be inserted randomly in the block. These components should reference components in the StudyConfig.components section of the config.
-
-Here's an example of how to use the RandomInterruption:
-
-```json
-{
- "order": "fixed",
- "components": [
- "component1",
- "component2",
- "component3",
- "component4",
- "component5",
- "component6"
- ],
- "interruptions": [
- {
- "spacing": "random",
- "numInterruptions": 3,
- "components": [
- "interruption1",
- "interruption2"
- ]
- }
- ]
-}
-```
-
-The resulting sequence array could be:
-
-```json
-[
- ["component1", "interruption1", "interruption2", "component2", "interruption1", "interruption2", "component3", "component4", "component5", "interruption1", "interruption2", "component6"],
- ["component1", "interruption1", "interruption2", "component2", "interruption1", "interruption2", "component3", "component4", "interruption1", "interruption2", "component5", "component6"],
- ["component1", "component2", "interruption1", "interruption2", "component3", "interruption1", "interruption2", "component4", "component5", "interruption1", "interruption2", "component6"],
- ...
-]
-```
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `components` | `string`[] | The components that are included in the interruption. These reference components in the StudyConfig.components section of the config. | [parser/types.ts:1395](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1395) |
-| `numInterruptions` | `number` | The number of times the interruption will be randomly added | [parser/types.ts:1393](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1393) |
-| `spacing` | `"random"` | If spacing is set to random, reVISit will add interruptions randomly. These interruptions will not ever be displayed as the first component in the block. | [parser/types.ts:1391](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1391) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/RankingResponse.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/RankingResponse.md
deleted file mode 100644
index c088d7c546..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/RankingResponse.md
+++ /dev/null
@@ -1,67 +0,0 @@
-# RankingResponse
-
-Defined in: [parser/types.ts:783](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L783)
-
-The RankingResponse interface is used to define the properties of a ranking widget response.
-RankingResponses render as a ranking widget with user specified options.
-
-There are three types of ranking widgets:
-Ranking Sublist: The participant is asked to rank a subset of items from a larger list.
-Ranking Categorical: The participant is asked to rank items within categories: HIGH, MEDIUM, and LOW.
-Ranking Pairwise: The participant is asked to rank items by comparing them in pairs.
-
-```json
-{
- "id": "ranking-sublist",
- "type": "ranking-sublist",
- "prompt": "Rank your top 2 favorite fruits from the list below",
- "location": "belowStimulus",
- "options": ["Apple", "Banana", "Orange", "Strawberry", "Grapes"],
- "default": {"Orange": "0", "Apple": "1"},
- "numItems": 2
-},
-{
- "id": "ranking-categorical",
- "type": "ranking-categorical",
- "prompt": "Sort these hobbies into the categories of HIGH, MEDIUM, and LOW based on your level of interest.",
- "location": "belowStimulus",
- "options": ["Drawing", "Singing", "Hiking", "Dancing", "Photography"],
- "default": {"Drawing": "HIGH", "Hiking": "MEDIUM", "Singing": "LOW"}
-},
-{
- "id": "ranking-pairwise",
- "type": "ranking-pairwise",
- "prompt": "Which meal would you prefer",
- "location": "belowStimulus",
- "options": ["Pizza", "Sushi", "Burger", "Pasta", "Salad", "Tacos"],
- "default": {"Pizza": "pair-0-high", "Sushi": "pair-0-low"}
-}
-```
-
-## Extends
-
-- [`BaseResponse`](BaseResponse.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `Record`\<`string`, `string`\> | The default value of the response. Provide an object keyed by option value. Values depend on ranking type: index strings for sublist (e.g. `"0"`), category labels for categorical (`"HIGH"`, `"MEDIUM"`, `"LOW"`), and pairwise slots (`"pair--high"` / `"pair--low"`). | - | [parser/types.ts:788](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L788) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:377](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L377) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:367](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L367) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:349](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L349) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:355](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L355) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:359](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L359) |
-| `numItems?` | `number` | The number of items to rank. Applies only to sublist and categorical ranking widgets. | - | [parser/types.ts:790](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L790) |
-| `options` | (`string` \| [`StringOption`](StringOption.md))[] | The options that are displayed as ranking options, provided as an array of objects, with label and value fields. | - | [parser/types.ts:786](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L786) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:365](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L365) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:351](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L351) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:357](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L357) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:363](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L363) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:361](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L361) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:353](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L353) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:375](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L375) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:373](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L373) |
-| `type` | `"ranking-sublist"` \| `"ranking-categorical"` \| `"ranking-pairwise"` | - | - | [parser/types.ts:784](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L784) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:369](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L369) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:371](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L371) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/ReactComponent.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/ReactComponent.md
deleted file mode 100644
index 9a7811f95c..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/ReactComponent.md
+++ /dev/null
@@ -1,88 +0,0 @@
-# ReactComponent
-
-Defined in: [parser/types.ts:1074](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1074)
-
-The ReactComponent interface is used to define the properties of a react component. This component is used to render react code with certain parameters. These parameters can be used within your react code to render different things.
-
-Unlike other types of components, the path for a React component is relative to the `src/public/` folder.
-Similar to our standard assets, we suggest creating a folder named `src/public/{studyName}/assets` to house all of the React component assets for a particular study.
-Your React component which you link to in the path must be default exported from its file.
-
-React components created this way have a generic prop type passed to the component on render, `>`, which has the following types.
-
-```ts
-{
- parameters: T;
- setAnswer: ({ status, provenanceGraph, answers }: { status: boolean, provenanceGraph?: TrrackedProvenance, answers: Record }) => void
-}
-```
-
-`parameters` is the same object passed in from the ReactComponent type below, allowing you to pass options in from the config to your component.
-`setAnswer` is a callback function allowing the creator of the ReactComponent to programmatically set the answer, as well as the provenance graph. This can be useful if you don't use the default answer interface, and instead have something more unique.
-
-So, for example, if I had the following ReactComponent in my config:
-```json
-{
- "type": "react-component",
- "path": "my_study/CoolComponent.tsx",
- "parameters": {
- "name": "Zach",
- "age": 26
- }
-}
-```
-
-My react component, CoolComponent.tsx, would exist in src/public/my_study/assets, and look something like this:
-
-```ts
-export default function CoolComponent({ parameters, setAnswer }: StimulusParams<{name: string, age: number}>) {
- // render something
-}
-```
-
-For in depth examples, see the following studies, and their associated codebases.
-https://revisit.dev/study/demo-react-trrack (https://github.com/revisit-studies/study/tree/v2.4.1/src/public/demo-react-trrack/assets)
-https://revisit.dev/study/example-brush-interactions (https://github.com/revisit-studies/study/tree/v2.4.1/src/public/example-brush-interactions/assets)
-
-## Extends
-
-- [`BaseIndividualComponent`](BaseIndividualComponent.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:993](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L993) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L997) |
-| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:953](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L953) |
-| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:957](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L957) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1001) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:973](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L973) |
-| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:969](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L969) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:971](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L971) |
-| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:955](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L955) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:983](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L983) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:981](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L981) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:979](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L979) |
-| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:977](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L977) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:975](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L975) |
-| `parameters?` | `Record`\<`string`, `unknown`\> | The parameters that are passed to the react component. These can be used within your react component to render different things. | - | [parser/types.ts:1079](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1079) |
-| `path` | `string` | The path to the react component. This should be a relative path from the src/public folder. | - | [parser/types.ts:1077](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1077) |
-| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:985](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L985) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:987](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L987) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:989](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L989) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:995](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L995) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:999](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L999) |
-| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:949](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L949) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1003) |
-| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1007) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:965](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L965) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:967](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L967) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:963](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L963) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1011) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1009) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:991](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L991) |
-| `type` | `"react-component"` | - | - | [parser/types.ts:1075](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1075) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1005) |
-| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:959](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L959) |
-| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:961](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L961) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/ReactiveResponse.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/ReactiveResponse.md
deleted file mode 100644
index a6ff06ec26..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/ReactiveResponse.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# ReactiveResponse
-
-Defined in: [parser/types.ts:805](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L805)
-
-The ReactiveResponse interface is used to define the properties of a reactive response.
-ReactiveResponses render as a list, that is connected to a WebsiteComponent, VegaComponent, or ReactComponent. When data is sent from the components, it is displayed in the list.
-```json
-{
- "id": "reactiveResponse",
- "prompt": "Answer clicked in the stimulus",
- "location": "aboveStimulus",
- "type": "reactive"
-}
-```
-
-## Extends
-
-- [`BaseResponse`](BaseResponse.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:377](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L377) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:367](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L367) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:349](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L349) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:355](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L355) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:359](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L359) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:365](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L365) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:351](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L351) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:357](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L357) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:363](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L363) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:361](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L361) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:353](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L353) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:375](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L375) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:373](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L373) |
-| `type` | `"reactive"` | - | - | [parser/types.ts:806](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L806) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:369](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L369) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:371](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L371) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/RepeatedComponentBlockCondition.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/RepeatedComponentBlockCondition.md
deleted file mode 100644
index a2ccfa7126..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/RepeatedComponentBlockCondition.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# RepeatedComponentBlockCondition
-
-Defined in: [parser/types.ts:1534](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1534)
-
-The RepeatedComponentBlockCondition interface is used to define a SkipCondition based on the number of correct or incorrect repeated components. You might use this if you need to check if an attention check was failed multiple times. This is similar to the [ComponentBlockCondition](../ComponentBlockCondition), but it only checks a specific repeated component.
-
-Here's an example of how to use the RepeatedComponentBlockCondition:
-
-```json
-{
- ...
- "skip": [
- {
- "name": "attentionCheck",
- "check": "repeatedComponent",
- "condition": "numIncorrect",
- "value": 2,
- "to": "end"
- }
- ]
- ...
-}
-```
-
-In this example, when the number of incorrect responses to the repeated component with the name "attentionCheck" is two, the participant will be redirected to the end of the study. If the number of incorrect responses is less than two, the participant will continue to the next component in the sequence.
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `check` | `"repeatedComponent"` | The check we'll perform. | [parser/types.ts:1538](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1538) |
-| `condition` | `"numCorrect"` \| `"numIncorrect"` | The condition to check. | [parser/types.ts:1540](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1540) |
-| `name` | `string` | The name of the repeated component to check (e.g. attentionCheck). | [parser/types.ts:1536](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1536) |
-| `to` | `string` | The id of the component or block to skip to | [parser/types.ts:1544](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1544) |
-| `value` | `number` | The number of correct or incorrect responses to check for. | [parser/types.ts:1542](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1542) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/Sequence.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/Sequence.md
deleted file mode 100644
index 9ed4cc3d60..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/Sequence.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Sequence
-
-## Properties
-
-| Property | Type |
-| :------ | :------ |
-| `components` | (`string` \| [`Sequence`](Sequence.md))[] |
-| `id?` | `string` |
-| `orderPath` | `string` |
-| `skip?` | [`SkipConditions`](../type-aliases/SkipConditions.md) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/ShortTextResponse.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/ShortTextResponse.md
deleted file mode 100644
index 04f819703c..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/ShortTextResponse.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# ShortTextResponse
-
-Defined in: [parser/types.ts:423](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L423)
-
-The ShortTextResponse interface is used to define the properties of a short text response.
-ShortTextResponses render as a text input that accepts any text and can optionally have a placeholder.
-```json
-{
- "id": "q-short-text",
- "prompt": "Short text example",
- "location": "aboveStimulus",
- "type": "shortText",
- "default": "Jane Doe",
- "placeholder": "Enter your answer here"
-}
-```
-
-## Extends
-
-- [`BaseResponse`](BaseResponse.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `string` | The default value of the response. Specify a string such as `"Jane Doe"`. | - | [parser/types.ts:428](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L428) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:377](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L377) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:367](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L367) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:349](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L349) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:355](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L355) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:359](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L359) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:365](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L365) |
-| `placeholder?` | `string` | The placeholder text that is displayed in the input. | - | [parser/types.ts:426](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L426) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:351](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L351) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:357](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L357) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:363](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L363) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:361](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L361) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:353](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L353) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:375](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L375) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:373](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L373) |
-| `type` | `"shortText"` | - | - | [parser/types.ts:424](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L424) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:369](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L369) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:371](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L371) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/SliderResponse.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/SliderResponse.md
deleted file mode 100644
index af2ccea35c..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/SliderResponse.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# SliderResponse
-
-Defined in: [parser/types.ts:651](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L651)
-
-The SliderResponse interface is used to define the properties of a slider response.
-SliderResponses render as a slider input with user specified steps. For example, you could have steps of 0, 50, and 100.
-```json
-{
- "id": "q-slider",
- "prompt": "How are you feeling?",
- "location": "aboveStimulus",
- "type": "slider",
- "default": 50,
- "options": [
- {
- "label": "Bad",
- "value": 0
- },
- {
- "label": "OK",
- "value": 50
- },
- {
- "label": "Good",
- "value": 100
- }
- ]
-}
-```
-
-## Extends
-
-- [`BaseResponse`](BaseResponse.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `default?` | `number` | The default value of the response. Specify a numeric value that falls within the slider range. | - | [parser/types.ts:656](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L656) |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:377](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L377) |
-| `hidden?` | `boolean` | Controls whether the response is hidden. | [`BaseResponse`](BaseResponse.md).[`hidden`](BaseResponse.md#hidden) | [parser/types.ts:367](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L367) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:349](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L349) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:355](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L355) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:359](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L359) |
-| `options` | [`NumberOption`](NumberOption.md)[] | This defines the steps in the slider and the extent of the slider as an array of objects that have a label and a value. | - | [parser/types.ts:654](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L654) |
-| `paramCapture?` | `string` | Use to capture querystring parameters in answers such as participant_name. See the examples for how this is used, but prefer `uiConfig.urlParticipantIdParam` if you are capturing a participant ID. | [`BaseResponse`](BaseResponse.md).[`paramCapture`](BaseResponse.md#paramcapture) | [parser/types.ts:365](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L365) |
-| `prompt` | `string` | The prompt that is displayed to the participant. You can use markdown here to render images, links, etc. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | [parser/types.ts:351](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L351) |
-| `required?` | `boolean` | Controls whether the response is required to be answered. Defaults to true. | [`BaseResponse`](BaseResponse.md).[`required`](BaseResponse.md#required) | [parser/types.ts:357](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L357) |
-| `requiredLabel?` | `string` | You can provide a required label, which makes it so a participant has to answer with a response that matches label. | [`BaseResponse`](BaseResponse.md).[`requiredLabel`](BaseResponse.md#requiredlabel) | [parser/types.ts:363](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L363) |
-| `requiredValue?` | `unknown` | You can provide a required value, which makes it so a participant has to answer with that value. | [`BaseResponse`](BaseResponse.md).[`requiredValue`](BaseResponse.md#requiredvalue) | [parser/types.ts:361](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L361) |
-| `secondaryText?` | `string` | The secondary text that is displayed to the participant under the prompt. This does not accept markdown. | [`BaseResponse`](BaseResponse.md).[`secondaryText`](BaseResponse.md#secondarytext) | [parser/types.ts:353](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L353) |
-| `smeqStyle?` | `boolean` | Whether to render the slider with a SMEQ style. Defaults to false. | - | [parser/types.ts:670](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L670) |
-| `snap?` | `boolean` | Whether the slider should snap between values. Defaults to false. Slider snapping disables the label above the handle. | - | [parser/types.ts:660](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L660) |
-| `spacing?` | `number` | The spacing between the ticks. If not provided, the spacing is the largest power of 10 smaller than the slider range. | - | [parser/types.ts:664](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L664) |
-| `startingValue?` | `number` | The starting value of the slider. Defaults to the minimum value. | - | [parser/types.ts:658](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L658) |
-| `step?` | `number` | The step value of the slider. If not provided (and snap not enabled), the step value is calculated as the range of the slider divided by 100. | - | [parser/types.ts:662](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L662) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:375](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L375) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:373](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L373) |
-| `tlxStyle?` | `boolean` | Whether to render the slider with a NASA-tlx style. Defaults to false. | - | [parser/types.ts:668](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L668) |
-| `type` | `"slider"` | - | - | [parser/types.ts:652](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L652) |
-| `withBar?` | `boolean` | Whether to render the slider with a bar to the left. Defaults to true. | - | [parser/types.ts:666](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L666) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:369](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L369) |
-| `withDontKnow?` | `boolean` | Renders the response with an option for "I don't know". This counts as a completed answer for the validation. | [`BaseResponse`](BaseResponse.md).[`withDontKnow`](BaseResponse.md#withdontknow) | [parser/types.ts:371](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L371) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/StoredAnswer.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/StoredAnswer.md
deleted file mode 100644
index 456a4b6aed..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/StoredAnswer.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# StoredAnswer
-
-Defined in: [store/types.ts:70](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L70)
-
-The StoredAnswer object is a data structure describing the participant's interaction with an individual component. It is the data structure used as values of the `answers` object of [ParticipantData](../ParticipantData). The general structure for this is below:
-
-```json
-{
- "answer": {
- "barChart": [
- 1.3
- ]
- },
- "startTime": 1711641174858,
- "endTime": 1711641178836,
- "windowEvents": [
- ...
- ]
-}
-```
-The `answer` object here uses the "id" in the [Response](../BaseResponse) list of the component in your [StudyConfiguration](../StudyConfig) as its keys. It then contains a list of the answers given. You are also given a start and end time for the participant's interaction with the component. Lastly, a set of windowEvents is given. Below is an example of the windowEvents list.
-
-Each item in the window event is given a time, a position an event name, and some extra information for the event (for mouse events, this is the location).
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `answer` | `Record`\<`string`, `string` \| `number` \| `boolean` \| `string`[]\> | Object whose keys are the "id"s in the Response list of the component in the StudyConfig and whose value is the inputted value from the participant. | [store/types.ts:72](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L72) |
-| `componentName` | `string` | - | [store/types.ts:74](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L74) |
-| `correctAnswer` | [`Answer`](Answer.md)[] | The correct answer for the component. | [store/types.ts:124](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L124) |
-| `endTime` | `number` | Time that the user ended interaction with the component in epoch milliseconds. | [store/types.ts:82](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L82) |
-| `formOrder?` | `Record`\<`string`, `string`[]\> | The order of the form elements in a base response. | [store/types.ts:130](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L130) |
-| `helpButtonClickedCount` | `number` | A counter indicating how many times participants opened the help tab during a task. Clicking help, or accessing the tab via answer feedback on an incorrect answer both are included in the counter. | [store/types.ts:120](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L120) |
-| `identifier` | `string` | - | [store/types.ts:73](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L73) |
-| `incorrectAnswers` | `Record`\<`string`, \{ `id`: `string`; `value`: `unknown`[]; \}\> | Object whose keys are the "id"s in the Response list of the component in the StudyConfig and whose value is a list of incorrect inputted values from the participant. Only relevant for trials with `provideFeedback` and correct answers enabled. | [store/types.ts:78](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L78) |
-| `optionOrders` | `Record`\<`string`, [`ParsedStringOption`](ParsedStringOption.md)[]\> | The order of question options in the component. | [store/types.ts:126](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L126) |
-| `parameters` | `Record`\<`string`, `any`\> | The parameters that were passed to the component. | [store/types.ts:122](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L122) |
-| `provenanceGraph` | `Record`\<`ResponseBlockLocation`, `TrrackedProvenance` \| `undefined`\> | The entire provenance graph exported from a Trrack instance from a React component. This will only be present if you are using React components and you're utilizing [Trrack](https://apps.vdl.sci.utah.edu/trrack) | [store/types.ts:84](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L84) |
-| `questionOrders` | `Record`\<`string`, `string`[]\> | The order of the questions in a matrix component. | [store/types.ts:128](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L128) |
-| `startTime` | `number` | Time that the user began interacting with the component in epoch milliseconds. | [store/types.ts:80](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L80) |
-| `timedOut` | `boolean` | A boolean value that indicates whether the participant timed out on this question. | [store/types.ts:118](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L118) |
-| `trialOrder` | `string` | The order of the trial in the sequence. | [store/types.ts:76](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L76) |
-| `windowEvents` | `EventType`[] | A list containing the time (in epoch milliseconds), the action (focus, input, keypress, mousedown, mouseup, mousemove, resize, scroll or visibility), and then either a coordinate pertaining to where the event took place on the screen or string related to such event. Below is an example of the windowEvents list. `"windowEvents": [ [ 1711641174878, "mousedown", [ 1843, 286 ] ], [ 1711641174878, "focus", "BUTTON" ], [ 1711641174935, "mouseup", [ 1843, 286 ] ], . . . [ 1711641178706, "mousemove", [ 1868, 728 ] ] ]` | [store/types.ts:116](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/store/types.ts#L116) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/StringOption.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/StringOption.md
deleted file mode 100644
index 558d8afdb1..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/StringOption.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# StringOption
-
-Defined in: [parser/types.ts:328](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L328)
-
-The StringOption interface is used to define the options for a dropdown, radio, buttons, checkbox, matrix, and ranking response.
-The label is the text that is displayed to the user, and the value is the value that is stored in the data file.
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the option. This does not accept markdown. | [parser/types.ts:334](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L334) |
-| `label` | `string` | The label displayed to participants. Markdown is supported. | [parser/types.ts:330](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L330) |
-| `value?` | `string` | The value stored in the participant's data. Defaults to label. | [parser/types.ts:332](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L332) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/StudyConfig.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/StudyConfig.md
deleted file mode 100644
index f7879f4131..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/StudyConfig.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# StudyConfig
-
-Defined in: [parser/types.ts:1784](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1784)
-
-The StudyConfig interface is used to define the properties of a study configuration. This is a JSON object with four main components: the StudyMetadata, the UIConfig, the Components, and the Sequence. Below is the general template that should be followed when constructing a Study configuration file.
-```json
-{
- "$schema": "https://raw.githubusercontent.com/revisit-studies/study/v2.4.1/src/parser/StudyConfigSchema.json",
- "studyMetadata": {
- ...
- },
- "uiConfig": {
- ...
- },
- "components": {
- ...
- },
- "sequence": {
- ...
- }
-}
-```
-
-:::info
-For information about each of the individual pieces of the study configuration file, you can visit the documentation for each one individually.
-:::
-
-The `$schema` line is used to verify the schema. If you're using VSCode (or other similar IDEs), including this line will allow for autocomplete and helpful suggestions when writing the study configuration.
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `$schema` | `string` | A required json schema property. This should point to the github link for the version of the schema you would like. The `$schema` line is used to verify the schema. If you're using VSCode (or other similar IDEs), including this line will allow for autocomplete and helpful suggestions when writing the study configuration. See examples for more information | [parser/types.ts:1786](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1786) |
-| `baseComponents?` | [`BaseComponents`](../type-aliases/BaseComponents.md) | The base components that are used in the study. These components can be used to template other components. See [BaseComponents](../../type-aliases/BaseComponents) for more information. | [parser/types.ts:1796](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1796) |
-| `components` | `Record`\<`string`, [`IndividualComponent`](../type-aliases/IndividualComponent.md) \| [`InheritedComponent`](../type-aliases/InheritedComponent.md)\> | The components that are used in the study. They must be fully defined here with all properties. Some properties may be inherited from baseComponents. | [parser/types.ts:1798](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1798) |
-| `importedLibraries?` | `string`[] | A list of libraries that are used in the study. This is used to import external libraries into the study. Library names are valid namespaces to be used later. | [parser/types.ts:1794](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1794) |
-| `sequence` | [`ComponentBlock`](ComponentBlock.md) \| [`DynamicBlock`](DynamicBlock.md) | The order of the components in the study. This might include some randomness. | [parser/types.ts:1800](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1800) |
-| `studyMetadata` | [`StudyMetadata`](StudyMetadata.md) | The metadata for the study. This is used to identify the study and version in the data file. | [parser/types.ts:1788](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1788) |
-| `studyRules?` | [`StudyRules`](StudyRules.md) | The study rules for the study. This is used to configure study constraints such as browsers, device sizes, etc. | [parser/types.ts:1792](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1792) |
-| `uiConfig` | [`UIConfig`](UIConfig.md) | The UI configuration for the study. This is used to configure the UI of the app. | [parser/types.ts:1790](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1790) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/StudyMetadata.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/StudyMetadata.md
deleted file mode 100644
index 5b744c2ece..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/StudyMetadata.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# StudyMetadata
-
-Defined in: [parser/types.ts:46](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L46)
-
-The StudyMetadata is used to describe certain properties of a study.
-Some of this data is displayed on the landing page when running the app, such as the title and description.
-Below is an example of a StudyMetadata entry in your study configuration file:
-```json
-"studyMetadata" : {
- "title": "My New Study",
- "version": "pilot",
- "authors": [
- "Jane Doe",
- "John Doe"
- ],
- "date": "2026-02-23",
- "description": "This study is meant to test your ability.",
- "organizations": [
- "The reVISit Team",
- "The Other Team"
- ]
-}
-```
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `authors` | `string`[] | The authors of your study. | [parser/types.ts:52](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L52) |
-| `date` | `string` | The date of your study, may be useful for the researcher. | [parser/types.ts:54](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L54) |
-| `description` | `string` | The description of your study, shown on the landing page. | [parser/types.ts:56](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L56) |
-| `organizations` | `string`[] | The organizations that are associated with your study. | [parser/types.ts:58](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L58) |
-| `title` | `string` | The title of your study, shown on the landing page. | [parser/types.ts:48](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L48) |
-| `version` | `string` | The version of your study. When you change a configuration file after a study has already been distributed to participants, you can change the version number so that the participants who see this new configuration file can be identified. | [parser/types.ts:50](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L50) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/StudyRules.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/StudyRules.md
deleted file mode 100644
index b31e71c97b..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/StudyRules.md
+++ /dev/null
@@ -1,49 +0,0 @@
-# StudyRules
-
-Defined in: [parser/types.ts:157](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L157)
-
-The StudyRules are used to define a study's constraints to determine whether a participant can take the study.
-If the criteria are not met, a warning message will be displayed.
-Below is an example of a StudyRules entry in your study configuration file:
-```json
-{
- "studyRules": {
- "display": {
- "minHeight": 400,
- "minWidth": 800
- },
- "browsers": {
- "allowed": [
- {
- "name": "chrome",
- "minVersion": 100
- },
- {
- "name": "firefox",
- "minVersion": 100
- },
- {
- "name": "safari",
- "minVersion": 10
- }
- ],
- "blockedMessage": "This study can only run in chrome, firefox, or safari."
- },
- "devices": {
- "allowed": ["tablet", "desktop", "mobile"]
- },
- "inputs": {
- "allowed": ["touch", "mouse"]
- }
- }
-}
-```
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `browsers?` | [`BrowserRules`](../type-aliases/BrowserRules.md) | Browser constraints | [parser/types.ts:161](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L161) |
-| `devices?` | [`DeviceRules`](../type-aliases/DeviceRules.md) | Browser constraints | [parser/types.ts:163](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L163) |
-| `display?` | [`DisplayRules`](../type-aliases/DisplayRules.md) | Display size constraints | [parser/types.ts:159](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L159) |
-| `inputs?` | [`InputRules`](../type-aliases/InputRules.md) | Input constraints | [parser/types.ts:165](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L165) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/TextOnlyResponse.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/TextOnlyResponse.md
deleted file mode 100644
index e7299c7fcf..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/TextOnlyResponse.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# TextOnlyResponse
-
-Defined in: [parser/types.ts:854](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L854)
-
-The TextOnlyResponse interface is used to define the properties of a text only response.
-TextOnlyResponses render as a block of text that is displayed to the user. This can be used to display instructions or other information.
-It does not accept any input from the user.
-```json
-{
- "id": "textOnlyResponse",
- "type": "textOnly",
- "prompt": "This is a text only response, it accepts markdown so you can **bold** or _italicize_ text.",
- "location": "belowStimulus",
- "restartEnumeration": true
-}
-```
-
-In this example, the text only response is displayed below the stimulus and the enumeration of the questions is restarted.
-
-## Extends
-
-- `Omit`\<[`BaseResponse`](BaseResponse.md), `"secondaryText"` \| `"required"` \| `"requiredValue"` \| `"requiredLabel"` \| `"paramCapture"` \| `"hidden"` \| `"withDontKnow"`\>
-
-## Properties
-
-| Property | Type | Description | Overrides | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ | ------ |
-| `excludeFromRandomization?` | `boolean` | Exclude response from randomization. If present, will override the `responseOrder` randomization setting in the components. Defaults to false. | - | [`BaseResponse`](BaseResponse.md).[`excludeFromRandomization`](BaseResponse.md#excludefromrandomization) | [parser/types.ts:377](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L377) |
-| `hidden?` | `undefined` | - | - | - | [parser/types.ts:866](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L866) |
-| `id` | `string` | The id of the response. This is used to identify the response in the data file. | - | [`BaseResponse`](BaseResponse.md).[`id`](BaseResponse.md#id) | [parser/types.ts:349](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L349) |
-| `infoText?` | `string` | The description that is displayed when the participant hovers over the response. This does not accept markdown. | - | [`BaseResponse`](BaseResponse.md).[`infoText`](BaseResponse.md#infotext) | [parser/types.ts:355](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L355) |
-| `location?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | Controls the response location. These might be the same for all responses, or differ across responses. Defaults to `belowStimulus` | - | [`BaseResponse`](BaseResponse.md).[`location`](BaseResponse.md#location) | [parser/types.ts:359](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L359) |
-| `paramCapture?` | `undefined` | - | - | - | [parser/types.ts:865](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L865) |
-| `prompt` | `string` | The markdown text that is displayed to the user. | [`BaseResponse`](BaseResponse.md).[`prompt`](BaseResponse.md#prompt) | - | [parser/types.ts:857](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L857) |
-| `required?` | `undefined` | - | - | - | [parser/types.ts:862](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L862) |
-| `requiredLabel?` | `undefined` | - | - | - | [parser/types.ts:864](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L864) |
-| `requiredValue?` | `undefined` | - | - | - | [parser/types.ts:863](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L863) |
-| `restartEnumeration?` | `boolean` | Whether to restart the enumeration of the questions. Defaults to false. | - | - | [parser/types.ts:859](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L859) |
-| `secondaryText?` | `undefined` | - | - | - | [parser/types.ts:861](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L861) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | - | [`BaseResponse`](BaseResponse.md).[`style`](BaseResponse.md#style) | [parser/types.ts:375](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L375) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | - | [`BaseResponse`](BaseResponse.md).[`stylesheetPath`](BaseResponse.md#stylesheetpath) | [parser/types.ts:373](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L373) |
-| `type` | `"textOnly"` | - | - | - | [parser/types.ts:855](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L855) |
-| `withDivider?` | `boolean` | Renders the response with a trailing divider. If present, will override the divider setting in the components or `uiConfig`. | - | [`BaseResponse`](BaseResponse.md).[`withDivider`](BaseResponse.md#withdivider) | [parser/types.ts:369](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L369) |
-| `withDontKnow?` | `undefined` | - | - | - | [parser/types.ts:867](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L867) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/UIConfig.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/UIConfig.md
deleted file mode 100644
index 74a731f877..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/UIConfig.md
+++ /dev/null
@@ -1,61 +0,0 @@
-# UIConfig
-
-Defined in: [parser/types.ts:241](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L241)
-
-The UIConfig is used to configure the UI of the app.
-This includes the logo, contact email, and whether to show a progress bar.
-The UIConfig is also used to configure the sidebar, which can be used to display the task instructions and capture responses. Below is an example of how the `uiConfig` would look in your study configuration (note, there are optional fields that are not shown here):
-```json
-uiConfig:{
- "logoPath": "/assets/logo.jpg",
- "contactEmail": "contact@revisit.dev",
- "withProgressBar": true,
- "withSidebar": true,
- "helpTextPath": "/assets/help.md",
- "autoDownloadStudy": true,
- "autoDownloadTime": 5000,
- "studyEndMsg": "Thank you for completing this study. You're the best!",
- "windowEventDebounceTime": 500,
- "urlParticipantIdParam": "PROLIFIC_ID",
- "numSequences": 500
-}
-```
-In the above, the `/assets/` path is referring to the path to your individual study assets. It is common practice to have your study directory contain an `assets` directory where all components and images relevant to your study reside. Note that this path is relative to the `public` folder of the repository - as is all other paths you define in reVISit (aside from React components whose paths are relative to `src/public`.)
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. Defaults to true. | [parser/types.ts:282](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L282) |
-| `autoDownloadStudy?` | `boolean` | Controls whether the study data is automatically downloaded at the end of the study. | [parser/types.ts:300](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L300) |
-| `autoDownloadTime?` | `number` | The time in milliseconds to wait before automatically downloading the study data. | [parser/types.ts:302](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L302) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [parser/types.ts:286](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L286) |
-| `contactEmail` | `string` | The email address that used during the study if a participant clicks contact. | [parser/types.ts:246](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L246) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. | [parser/types.ts:292](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L292) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. | [parser/types.ts:262](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L262) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. | [parser/types.ts:260](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L260) |
-| `logoPath` | `string` | The path to the logo image. This is displayed on the landing page and the header. | [parser/types.ts:244](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L244) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. | [parser/types.ts:272](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L272) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. | [parser/types.ts:270](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L270) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. | [parser/types.ts:268](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L268) |
-| `nextButtonText?` | `string` | The text to display on the next button. | [parser/types.ts:266](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L266) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. Defaults to false. | [parser/types.ts:264](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L264) |
-| `numSequences?` | `number` | The number of sequences to generate for the study. This is used to generate the random sequences for the study. Defaults to 1000. | [parser/types.ts:304](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L304) |
-| `participantNameField?` | `string` | The default name field for a participant. Directs reVISit to use the task and response id as a name in UI elements. For example, if you wanted the response 'prolificId' from the task 'introduction' to be the name, this field would be 'introduction.prolificId' | [parser/types.ts:308](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L308) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. | [parser/types.ts:274](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L274) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. Defaults to false. | [parser/types.ts:278](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L278) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If true, will record audio on all components unless deactivated on individual components. Defaults to false. | [parser/types.ts:284](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L284) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If true, will record audio on all components unless deactivated on individual components. This must be set to true if you want to record audio on any component in your study. Defaults to false. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before any component that you want to record the screen on to ensure permissions are granted and screen capture has started. | [parser/types.ts:288](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L288) |
-| `recordScreenFPS?` | `number` | Desired fps for recording screen. If possible, this value will be used, but if it's not possible, the user agent will use the closest possible match. | [parser/types.ts:290](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L290) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. Defaults to false. | [parser/types.ts:294](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L294) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. | [parser/types.ts:256](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L256) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. | [parser/types.ts:258](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L258) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. Defaults to 300. | [parser/types.ts:254](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L254) |
-| `studyEndMsg?` | `string` | The message to display when the study ends. | [parser/types.ts:298](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L298) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [parser/types.ts:310](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L310) |
-| `timeoutReject?` | `boolean` | Whether to redirect a timed out participant to a rejection page. This only works for components where the `nextButtonDisableTime` field is set. | [parser/types.ts:276](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L276) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. The next button will be disabled until either the correct answer is given or the number of attempts is reached. When the number of attempts is reached, if the answer is incorrect still, the correct value will be shown to the participant. The default value is 2. Providing a value of -1 will allow infinite attempts and the participant must enter the correct answer to continue, and reVISit will not show the correct answer to the user. | [parser/types.ts:280](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L280) |
-| `urlParticipantIdParam?` | `string` | If the participant ID is passed in the URL, this is the name of the querystring parameter that is used to capture the participant ID (e.g. PROLIFIC_ID). This will allow a user to continue a study on different devices and browsers. | [parser/types.ts:306](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L306) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. Defaults to 100. E.g 100 here means 1000ms / 100ms = 10 times a second, 200 here means 1000ms / 200ms = 5 times per second | [parser/types.ts:296](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L296) |
-| `withProgressBar` | `boolean` | Controls whether the progress bar is rendered in the study. | [parser/types.ts:248](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L248) |
-| `withSidebar` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. | [parser/types.ts:250](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L250) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/VegaComponentConfig.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/VegaComponentConfig.md
deleted file mode 100644
index 3fb32decda..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/VegaComponentConfig.md
+++ /dev/null
@@ -1,75 +0,0 @@
-# VegaComponentConfig
-
-Defined in: [parser/types.ts:1256](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1256)
-
-The VegaComponentConfig interface is used to define the properties of a Vega Component. This component is used to render a Vega/Vega-Lite Component by adding Vega/Vega-Lite specs within the reVISit config itself.
-
-To do this, you would use the following snippet:
-```json
-{
- "type": "vega",
- "config": { ... vega specs here ...}
-}
-```
-
-If you are using Vega, you can use signals with `revisitAnswer` to send the user's responses back to the reVISit. For example, you can use the following snippet in your Vega spec's signals section:
-```json
-{
- "signals": [
- {
- "name": "revisitAnswer",
- "value": {},
- "on": [
- {
- "events": "rect:click",
- "update": "{responseId: 'vegaDemoResponse1', response: datum.category}"
- }
- ]
- }
- ]
-}
-```
-In this example, when a user clicks on a rectangle in the Vega chart, the `revisitAnswer` signal is updated with the responseId and response.
-
-## Extends
-
-- [`BaseIndividualComponent`](BaseIndividualComponent.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:993](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L993) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L997) |
-| `config` | `object` | The vega or vega-lite configuration. | - | [parser/types.ts:1259](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1259) |
-| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:953](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L953) |
-| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:957](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L957) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1001) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:973](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L973) |
-| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:969](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L969) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:971](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L971) |
-| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:955](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L955) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:983](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L983) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:981](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L981) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:979](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L979) |
-| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:977](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L977) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:975](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L975) |
-| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:985](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L985) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:987](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L987) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:989](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L989) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:995](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L995) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:999](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L999) |
-| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:949](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L949) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1003) |
-| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1007) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:965](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L965) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:967](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L967) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:963](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L963) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1011) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1009) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:991](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L991) |
-| `type` | `"vega"` | - | - | [parser/types.ts:1257](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1257) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1005) |
-| `withActions?` | `boolean` | Whether to include vega actions. Defaults to true. | - | [parser/types.ts:1261](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1261) |
-| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:959](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L959) |
-| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:961](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L961) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/VegaComponentPath.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/VegaComponentPath.md
deleted file mode 100644
index 6f3e25e144..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/VegaComponentPath.md
+++ /dev/null
@@ -1,75 +0,0 @@
-# VegaComponentPath
-
-Defined in: [parser/types.ts:1218](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1218)
-
-The VegaComponentPath interface is used to define the properties of a Vega Component. This component is used to render a Vega/Vega-Lite Component with path pointing to your Vega/Vega-Lite specs file.
-
-For example, to render a vega based stimuli with a path of `/assets/vega.spec.json`, you would use the following snippet:
-```json
-{
- "type": "vega",
- "path": "/assets/vega.spec.json",
-}
-```
-
-If you are using Vega, you can use signals with `revisitAnswer` to send the user's responses back to the reVISit. For example, you can use the following snippet in your Vega spec file's signals section:
-```json
-{
- "signals": [
- {
- "name": "revisitAnswer",
- "value": {},
- "on": [
- {
- "events": "rect:click",
- "update": "{responseId: 'vegaDemoResponse1', response: datum.category}"
- }
- ]
- }
- ]
-}
-```
- * In this example, when a user clicks on a rectangle in the Vega chart, the `revisitAnswer` signal is updated with the responseId and response. This signal is then passed to reVISit as the participant's response.
-
-## Extends
-
-- [`BaseIndividualComponent`](BaseIndividualComponent.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:993](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L993) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L997) |
-| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:953](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L953) |
-| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:957](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L957) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1001) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:973](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L973) |
-| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:969](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L969) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:971](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L971) |
-| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:955](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L955) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:983](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L983) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:981](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L981) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:979](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L979) |
-| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:977](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L977) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:975](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L975) |
-| `path` | `string` | The path to the vega file. This should be a relative path from the public folder. | - | [parser/types.ts:1221](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1221) |
-| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:985](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L985) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:987](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L987) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:989](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L989) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:995](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L995) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:999](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L999) |
-| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:949](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L949) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1003) |
-| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1007) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:965](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L965) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:967](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L967) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:963](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L963) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1011) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1009) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:991](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L991) |
-| `type` | `"vega"` | - | - | [parser/types.ts:1219](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1219) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1005) |
-| `withActions?` | `boolean` | Whether to include vega actions. Defaults to true. | - | [parser/types.ts:1223](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1223) |
-| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:959](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L959) |
-| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:961](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L961) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/VideoComponent.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/VideoComponent.md
deleted file mode 100644
index b8ee158f5b..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/VideoComponent.md
+++ /dev/null
@@ -1,61 +0,0 @@
-# VideoComponent
-
-Defined in: [parser/types.ts:1282](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1282)
-
-The VideoComponent interface is used to define the properties of a video component. This component is used to render a video with optional controls.
-
-Most often, video components will be used for trainings, and will have a `forceCompletion` field set to true. This will prevent the participant from moving on until the video has finished playing.
-
-As such, the `forceCompletion` field is set to true by default, and the `withTimeline` field is set to false by default.
-
-For example, to render a training video with a path of `/assets/video.mp4`, you would use the following snippet:
-```json
-{
- "type": "video",
- "path": "/assets/video.mp4",
-}
-```
-
-## Extends
-
-- [`BaseIndividualComponent`](BaseIndividualComponent.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:993](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L993) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L997) |
-| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:953](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L953) |
-| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:957](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L957) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1001) |
-| `forceCompletion?` | `boolean` | Whether to force the video to play until the end. Defaults to true. | - | [parser/types.ts:1287](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1287) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:973](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L973) |
-| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:969](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L969) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:971](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L971) |
-| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:955](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L955) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:983](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L983) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:981](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L981) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:979](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L979) |
-| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:977](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L977) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:975](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L975) |
-| `path` | `string` | The path to the video. This could be a relative path from the public folder or might be a url to an external website. | - | [parser/types.ts:1285](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1285) |
-| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:985](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L985) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:987](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L987) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:989](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L989) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:995](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L995) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:999](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L999) |
-| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:949](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L949) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1003) |
-| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1007) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:965](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L965) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:967](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L967) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:963](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L963) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1011) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1009) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:991](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L991) |
-| `type` | `"video"` | - | - | [parser/types.ts:1283](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1283) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1005) |
-| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:959](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L959) |
-| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:961](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L961) |
-| `withTimeline?` | `boolean` | Whether to show the video timeline. Defaults to false. | - | [parser/types.ts:1289](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1289) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/interfaces/WebsiteComponent.md b/versioned_docs/version-v2.4.1/typedoc/interfaces/WebsiteComponent.md
deleted file mode 100644
index 1b81fad976..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/interfaces/WebsiteComponent.md
+++ /dev/null
@@ -1,100 +0,0 @@
-# WebsiteComponent
-
-Defined in: [parser/types.ts:1158](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1158)
-
-The WebsiteComponent interface is used to define the properties of a website component. A WebsiteComponent is used to render an iframe with a website inside of it. This can be used to display an external website or an html file that is located in the public folder.
-```json
-{
- "type": "website",
- "path": "/assets/website.html"
-}
-```
-
-To pass a data from the config to the website, you can use the `parameters` field as below:
-
-```json
-{
- "type": "website",
- "path": "/website.html",
- "parameters": {
- "barData": [0.32, 0.01, 1.2, 1.3, 0.82, 0.4, 0.3]
- },
- "response": [
- {
- "id": "barChart",
- "prompt": "Your selected answer:",
- "location": "belowStimulus",
- "type": "reactive"
- }
- ]
-}
-```
-In the `website.html` file, by including `revisit-communicate.js`, you can use the `Revisit.onDataReceive` method to retrieve the data, and `Revisit.postAnswers` to send the user's responses back to the reVISit as shown in the example below:
-
-```html
-
-
-```
-
-If the html website implements Trrack library for provenance tracking, you can send the provenance graph back to reVISit by calling `Revisit.postProvenance` as shown in the example below. You need to call this each time the Trrack state is updated so that reVISit is kept aware of the changes in the provenance graph.
-
-```ts
-const trrack = initializeTrrack({
- initialState,
- registry
- });
-
- ...
- Revisit.postProvenance(trrack.graph.backend);
-```
-
-## Extends
-
-- [`BaseIndividualComponent`](BaseIndividualComponent.md)
-
-## Properties
-
-| Property | Type | Description | Inherited from | Defined in |
-| ------ | ------ | ------ | ------ | ------ |
-| `allowFailedTraining?` | `boolean` | Controls whether the component should allow failed training. If present, will override the allow failed training setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`allowFailedTraining`](BaseIndividualComponent.md#allowfailedtraining) | [parser/types.ts:993](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L993) |
-| `clickToRecord?` | `boolean` | Enables a click-and-hold microphone button instead of continuous recording. When true, audio is muted by default and is recorded only while the button is held. When false, recording starts immediately and can be paused/resumed via the microphone button. Defaults to false. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`clickToRecord`](BaseIndividualComponent.md#clicktorecord) | [parser/types.ts:997](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L997) |
-| `correctAnswer?` | [`Answer`](Answer.md)[] | The correct answer to the component. This is used for training trials where the user is shown the correct answer after a guess. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`correctAnswer`](BaseIndividualComponent.md#correctanswer) | [parser/types.ts:953](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L953) |
-| `description?` | `string` | The description of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`description`](BaseIndividualComponent.md#description) | [parser/types.ts:957](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L957) |
-| `enumerateQuestions?` | `boolean` | Whether to prepend questions with their index (+ 1). This should only be used when all questions are in the same location, e.g. all are in the side bar. If present, will override the enumeration of questions setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`enumerateQuestions`](BaseIndividualComponent.md#enumeratequestions) | [parser/types.ts:1001](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1001) |
-| `helpTextPath?` | `string` | The path to the help text file. This is displayed when a participant clicks help. Markdown is supported. If present, will override the help text path set in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`helpTextPath`](BaseIndividualComponent.md#helptextpath) | [parser/types.ts:973](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L973) |
-| `instruction?` | `string` | The instruction of the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instruction`](BaseIndividualComponent.md#instruction) | [parser/types.ts:969](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L969) |
-| `instructionLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the instructions. If present, will override the instruction location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`instructionLocation`](BaseIndividualComponent.md#instructionlocation) | [parser/types.ts:971](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L971) |
-| `meta?` | `Record`\<`string`, `unknown`\> | The meta data for the component. This is used to identify and provide additional information for the component in the admin panel. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`meta`](BaseIndividualComponent.md#meta) | [parser/types.ts:955](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L955) |
-| `nextButtonDisableTime?` | `number` | The time in milliseconds to wait before the next button is disabled. If present, will override the next button disable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonDisableTime`](BaseIndividualComponent.md#nextbuttondisabletime) | [parser/types.ts:983](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L983) |
-| `nextButtonEnableTime?` | `number` | The time in milliseconds to wait before the next button is enabled. If present, will override the next button enable time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonEnableTime`](BaseIndividualComponent.md#nextbuttonenabletime) | [parser/types.ts:981](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L981) |
-| `nextButtonLocation?` | [`ConfigResponseBlockLocation`](../type-aliases/ConfigResponseBlockLocation.md) | The location of the next button. If present, will override the next button location setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonLocation`](BaseIndividualComponent.md#nextbuttonlocation) | [parser/types.ts:979](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L979) |
-| `nextButtonText?` | `string` | The text to display on the next button. If present, will override the next button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextButtonText`](BaseIndividualComponent.md#nextbuttontext) | [parser/types.ts:977](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L977) |
-| `nextOnEnter?` | `boolean` | Whether enter key should move to the next question. If present, will override the enter key setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`nextOnEnter`](BaseIndividualComponent.md#nextonenter) | [parser/types.ts:975](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L975) |
-| `parameters?` | `Record`\<`string`, `unknown`\> | The parameters that are passed to the website (iframe). These can be used within your website to render different things. | - | [parser/types.ts:1163](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1163) |
-| `path` | `string` | The path to the website. This should be a relative path from the public folder or could be an external website. | - | [parser/types.ts:1161](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1161) |
-| `previousButton?` | `boolean` | Whether to show the previous button. If present, will override the previous button setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButton`](BaseIndividualComponent.md#previousbutton) | [parser/types.ts:985](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L985) |
-| `previousButtonText?` | `string` | The text that is displayed on the previous button. If present, will override the previous button text setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`previousButtonText`](BaseIndividualComponent.md#previousbuttontext) | [parser/types.ts:987](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L987) |
-| `provideFeedback?` | `boolean` | Controls whether the component should provide feedback to the participant, such as in a training trial. If present, will override the provide feedback setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`provideFeedback`](BaseIndividualComponent.md#providefeedback) | [parser/types.ts:989](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L989) |
-| `recordAudio?` | `boolean` | Whether or not we want to utilize think-aloud features. If present, will override the record audio setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordAudio`](BaseIndividualComponent.md#recordaudio) | [parser/types.ts:995](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L995) |
-| `recordScreen?` | `boolean` | Whether or not we want to utilize screen recording feature. If present, will override the record screen setting in the uiConfig. If true, the uiConfig must have recordScreen set to true or the screen will not be captured. It's also required that the library component, $screen-recording.components.screenRecordingPermission, be included in the study at some point before this component to ensure permissions are granted and screen capture has started. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`recordScreen`](BaseIndividualComponent.md#recordscreen) | [parser/types.ts:999](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L999) |
-| `response` | [`Response`](../type-aliases/Response.md)[] | The responses to the component | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`response`](BaseIndividualComponent.md#response) | [parser/types.ts:949](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L949) |
-| `responseDividers?` | `boolean` | Whether to show the response dividers. If present, will override the response dividers setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseDividers`](BaseIndividualComponent.md#responsedividers) | [parser/types.ts:1003](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1003) |
-| `responseOrder?` | `"random"` \| `"fixed"` | The order of the responses. Defaults to 'fixed'. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`responseOrder`](BaseIndividualComponent.md#responseorder) | [parser/types.ts:1007](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1007) |
-| `showTitle?` | `boolean` | Controls whether the title should be hidden in the study. If present, will override the title setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitle`](BaseIndividualComponent.md#showtitle) | [parser/types.ts:965](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L965) |
-| `showTitleBar?` | `boolean` | Controls whether the title bar should be hidden in the study. If present, will override the title bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`showTitleBar`](BaseIndividualComponent.md#showtitlebar) | [parser/types.ts:967](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L967) |
-| `sidebarWidth?` | `number` | The width of the left sidebar. If present, will override the sidebar width setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`sidebarWidth`](BaseIndividualComponent.md#sidebarwidth) | [parser/types.ts:963](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L963) |
-| `style?` | [`Styles`](../type-aliases/Styles.md) | You can set styles here, using React CSSProperties, for example: `{"width": 100}` or `{"width": "50%"}` | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`style`](BaseIndividualComponent.md#style) | [parser/types.ts:1011](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1011) |
-| `stylesheetPath?` | `string` | The path to the external stylesheet file. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`stylesheetPath`](BaseIndividualComponent.md#stylesheetpath) | [parser/types.ts:1009](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1009) |
-| `trainingAttempts?` | `number` | The number of training attempts allowed for the component. If present, will override the training attempts setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`trainingAttempts`](BaseIndividualComponent.md#trainingattempts) | [parser/types.ts:991](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L991) |
-| `type` | `"website"` | - | - | [parser/types.ts:1159](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1159) |
-| `windowEventDebounceTime?` | `number` | Debounce time in milliseconds for automatically tracked window events. If present, will override the window event debounce time setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`windowEventDebounceTime`](BaseIndividualComponent.md#windoweventdebouncetime) | [parser/types.ts:1005](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1005) |
-| `withProgressBar?` | `boolean` | Controls whether the progress bar is rendered. If present, will override the progress bar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withProgressBar`](BaseIndividualComponent.md#withprogressbar) | [parser/types.ts:959](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L959) |
-| `withSidebar?` | `boolean` | Controls whether the left sidebar is rendered at all. Required to be true if your response's location is set to sidebar for any question. If present, will override the sidebar setting in the uiConfig. | [`BaseIndividualComponent`](BaseIndividualComponent.md).[`withSidebar`](BaseIndividualComponent.md#withsidebar) | [parser/types.ts:961](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L961) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/type-aliases/BaseComponents.md b/versioned_docs/version-v2.4.1/typedoc/type-aliases/BaseComponents.md
deleted file mode 100644
index e8fae8a080..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/type-aliases/BaseComponents.md
+++ /dev/null
@@ -1,48 +0,0 @@
-# BaseComponents
-
-> **BaseComponents** = `Record`\<`string`, `Partial`\<[`IndividualComponent`](IndividualComponent.md)\>\>
-
-Defined in: [parser/types.ts:1756](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1756)
-
-The baseComponents is an optional set of components which can help template other components. For example, suppose you have a single HTML file that you want to display to the user several times. Instead of having the same component twice in the `components` list, you can have a single baseComponent with all the information that the two HTML components will share. A great example is showing the same HTML component but with two different questions;
-
-Using baseComponents:
-
-```json
-"baseComponents": {
- "my-image-component": {
- "instructionLocation": "sidebar",
- "nextButtonLocation": "sidebar",
- "path": "/assets/my-image.jpg",
- "response": [
- {
- "id": "my-image-id",
- "options": ["Europe", "Japan", "USA"],
- "prompt": "Your Selected Answer:",
- "type": "dropdown"
- }
- ],
- "type": "image"
- }
-}
-```
-In the above code snippet, we have a single base component which holds the information about the type of component, the path to the image, and the response (which is a dropdown containing three choices). Any component which contains the `"baseComponent":"my-image-component"` key-value pair will inherit each of these properties. Thus, if we have three different questions which have the same choices and are concerning the same image, we can define our components like below:
-```json
-"components": {
- "q1": {
- "baseComponent": "my-image-component",
- "description": "Choosing section with largest GDP",
- "instruction": "Which region has the largest GDP?"
- },
- "q2": {
- "baseComponent": "my-image-component",
- "description": "Choosing section with lowest GDP",
- "instruction": "Which region has the lowest GDP?"
- },
- "q3": {
- "baseComponent": "my-image-component",
- "description": "Choosing section with highest exports of Wheat",
- "instruction": "Which region had the most Wheat exported in 2022?"
- }
-}
-```
diff --git a/versioned_docs/version-v2.4.1/typedoc/type-aliases/BrowserRules.md b/versioned_docs/version-v2.4.1/typedoc/type-aliases/BrowserRules.md
deleted file mode 100644
index 14fa4df417..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/type-aliases/BrowserRules.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# BrowserRules
-
-> **BrowserRules** = `object`
-
-Defined in: [parser/types.ts:78](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L78)
-
-Rules specifying which browsers and their minimum versions the study supports.
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `allowed` | [`UserBrowser`](UserBrowser.md)[] | List of browser types and their minimum version to support. | [parser/types.ts:80](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L80) |
-| `blockedMessage?` | `string` | Optional message to be displayed when browser criteria are not met. | [parser/types.ts:82](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L82) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/type-aliases/ConfigResponseBlockLocation.md b/versioned_docs/version-v2.4.1/typedoc/type-aliases/ConfigResponseBlockLocation.md
deleted file mode 100644
index bd37cb355a..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/type-aliases/ConfigResponseBlockLocation.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# ConfigResponseBlockLocation
-
-> **ConfigResponseBlockLocation** = `Exclude`\<`ResponseBlockLocation`, `"stimulus"`\>
-
-Defined in: [parser/types.ts:65](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L65)
diff --git a/versioned_docs/version-v2.4.1/typedoc/type-aliases/DeviceRules.md b/versioned_docs/version-v2.4.1/typedoc/type-aliases/DeviceRules.md
deleted file mode 100644
index d2380cd59a..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/type-aliases/DeviceRules.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# DeviceRules
-
-> **DeviceRules** = `object`
-
-Defined in: [parser/types.ts:88](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L88)
-
-Rules specifying which device types the study supports.
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `allowed` | [`UserDevice`](UserDevice.md)[] | List of device types to support. | [parser/types.ts:90](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L90) |
-| `blockedMessage?` | `string` | Optional message to be displayed when device criteria are not met. | [parser/types.ts:92](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L92) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/type-aliases/DisplayRules.md b/versioned_docs/version-v2.4.1/typedoc/type-aliases/DisplayRules.md
deleted file mode 100644
index 7a09af0e38..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/type-aliases/DisplayRules.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# DisplayRules
-
-> **DisplayRules** = `object`
-
-Defined in: [parser/types.ts:106](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L106)
-
-Rules specifying which minimum screen dimensions for the study.
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `blockedMessage?` | `string` | Optional message to be displayed when display criteria are not met. | [parser/types.ts:116](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L116) |
-| `maxHeight?` | `number` | The maximum screen height size for the study | [parser/types.ts:112](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L112) |
-| `maxWidth?` | `number` | The maximum screen width size for the study | [parser/types.ts:114](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L114) |
-| `minHeight` | `number` | The minimum screen height size for the study | [parser/types.ts:108](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L108) |
-| `minWidth` | `number` | The minimum screen width size for the study | [parser/types.ts:110](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L110) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/type-aliases/ErrorWarningCategory.md b/versioned_docs/version-v2.4.1/typedoc/type-aliases/ErrorWarningCategory.md
deleted file mode 100644
index 4cef9a0c79..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/type-aliases/ErrorWarningCategory.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# ErrorWarningCategory
-
-> **ErrorWarningCategory** = `"invalid-config"` \| `"invalid-library-config"` \| `"undefined-library"` \| `"undefined-base-component"` \| `"undefined-component"` \| `"sequence-validation"` \| `"skip-validation"` \| `"unused-component"` \| `"disabled-sidebar"` \| `"default-contact-email"`
-
-Defined in: [parser/types.ts:1843](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1843)
diff --git a/versioned_docs/version-v2.4.1/typedoc/type-aliases/IndividualComponent.md b/versioned_docs/version-v2.4.1/typedoc/type-aliases/IndividualComponent.md
deleted file mode 100644
index 191d5d222b..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/type-aliases/IndividualComponent.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# IndividualComponent
-
-> **IndividualComponent** = [`MarkdownComponent`](../interfaces/MarkdownComponent.md) \| [`ReactComponent`](../interfaces/ReactComponent.md) \| [`ImageComponent`](../interfaces/ImageComponent.md) \| [`WebsiteComponent`](../interfaces/WebsiteComponent.md) \| [`QuestionnaireComponent`](../interfaces/QuestionnaireComponent.md) \| [`VegaComponent`](VegaComponent.md) \| [`VideoComponent`](../interfaces/VideoComponent.md)
-
-Defined in: [parser/types.ts:1292](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1292)
diff --git a/versioned_docs/version-v2.4.1/typedoc/type-aliases/InheritedComponent.md b/versioned_docs/version-v2.4.1/typedoc/type-aliases/InheritedComponent.md
deleted file mode 100644
index bdedd1dc15..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/type-aliases/InheritedComponent.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# InheritedComponent
-
-> **InheritedComponent** = `Partial`\<[`IndividualComponent`](IndividualComponent.md)\> & `object`
-
-Defined in: [parser/types.ts:1711](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1711)
-
-An InheritedComponent is a component that inherits properties from a baseComponent. This is used to avoid repeating properties in components. This also means that components in the baseComponents object can be partially defined, while components in the components object can inherit from them and must be fully defined and include all properties (after potentially merging with a base component).
-
-## Type Declaration
-
-### baseComponent
-
-> **baseComponent**: `string`
diff --git a/versioned_docs/version-v2.4.1/typedoc/type-aliases/InputRules.md b/versioned_docs/version-v2.4.1/typedoc/type-aliases/InputRules.md
deleted file mode 100644
index 2ad79df4b9..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/type-aliases/InputRules.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# InputRules
-
-> **InputRules** = `object`
-
-Defined in: [parser/types.ts:98](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L98)
-
-Rules specifying which input methods the study supports.
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `allowed` | [`UserInput`](UserInput.md)[] | List of inputs to support. | [parser/types.ts:100](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L100) |
-| `blockedMessage?` | `string` | Optional message to be displayed when input criteria are not met. | [parser/types.ts:102](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L102) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/type-aliases/InterruptionBlock.md b/versioned_docs/version-v2.4.1/typedoc/type-aliases/InterruptionBlock.md
deleted file mode 100644
index 944d082073..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/type-aliases/InterruptionBlock.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# InterruptionBlock
-
-> **InterruptionBlock** = [`DeterministicInterruption`](../interfaces/DeterministicInterruption.md) \| [`RandomInterruption`](../interfaces/RandomInterruption.md)
-
-Defined in: [parser/types.ts:1399](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1399)
-
-The InterruptionBlock interface is used to define interruptions in a block. These can be used for breaks or attention checks. Interruptions can be deterministic or random.
diff --git a/versioned_docs/version-v2.4.1/typedoc/type-aliases/MatrixResponse.md b/versioned_docs/version-v2.4.1/typedoc/type-aliases/MatrixResponse.md
deleted file mode 100644
index 9444e78bef..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/type-aliases/MatrixResponse.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# MatrixResponse
-
-> **MatrixResponse** = [`MatrixRadioResponse`](../interfaces/MatrixRadioResponse.md) \| [`MatrixCheckboxResponse`](../interfaces/MatrixCheckboxResponse.md)
-
-Defined in: [parser/types.ts:577](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L577)
diff --git a/versioned_docs/version-v2.4.1/typedoc/type-aliases/Response.md b/versioned_docs/version-v2.4.1/typedoc/type-aliases/Response.md
deleted file mode 100644
index f84ebc3d8d..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/type-aliases/Response.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Response
-
-> **Response** = [`NumericalResponse`](../interfaces/NumericalResponse.md) \| [`ShortTextResponse`](../interfaces/ShortTextResponse.md) \| [`LongTextResponse`](../interfaces/LongTextResponse.md) \| [`LikertResponse`](../interfaces/LikertResponse.md) \| [`DropdownResponse`](../interfaces/DropdownResponse.md) \| [`SliderResponse`](../interfaces/SliderResponse.md) \| [`RadioResponse`](../interfaces/RadioResponse.md) \| [`CheckboxResponse`](../interfaces/CheckboxResponse.md) \| [`RankingResponse`](../interfaces/RankingResponse.md) \| [`ReactiveResponse`](../interfaces/ReactiveResponse.md) \| [`MatrixResponse`](MatrixResponse.md) \| [`ButtonsResponse`](../interfaces/ButtonsResponse.md) \| [`TextOnlyResponse`](../interfaces/TextOnlyResponse.md) \| [`DividerResponse`](../interfaces/DividerResponse.md)
-
-Defined in: [parser/types.ts:897](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L897)
diff --git a/versioned_docs/version-v2.4.1/typedoc/type-aliases/SkipConditions.md b/versioned_docs/version-v2.4.1/typedoc/type-aliases/SkipConditions.md
deleted file mode 100644
index ea1129ba27..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/type-aliases/SkipConditions.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# SkipConditions
-
-> **SkipConditions** = ([`IndividualComponentSingleResponseCondition`](../interfaces/IndividualComponentSingleResponseCondition.md) \| [`IndividualComponentAllResponsesCondition`](../interfaces/IndividualComponentAllResponsesCondition.md) \| [`ComponentBlockCondition`](../interfaces/ComponentBlockCondition.md) \| [`RepeatedComponentBlockCondition`](../interfaces/RepeatedComponentBlockCondition.md))[]
-
-Defined in: [parser/types.ts:1555](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1555)
-
-The SkipConditions interface is used to define skip conditions. This is used to skip to a different component/block based on the response to a component or based on the number of correct/incorrect responses in a block. Skip conditions work recursively: if you have a nested block, the parent blocks' skip conditions will be considered when computing the skip logic.
-
-Skip conditions are evaluated in the order they are defined in the array. If a condition is met, the participant will be redirected to the component or block specified in the `"to"` property. If no conditions are met, the participant will continue to the next component in the sequence.
-
-Skip conditions allow you to jump to a different component or block. If you intend to skip to a block, you should specify a block id in the sequence. If you intend to skip to a component, you should specify a component id. Skipping backwards is not supported. Skipping to a repeated component will skip to the first instance of the component after the component that triggered the skip.
-
-Please see the interface definitions for more specific information on the different types of skip conditions.
diff --git a/versioned_docs/version-v2.4.1/typedoc/type-aliases/Styles.md b/versioned_docs/version-v2.4.1/typedoc/type-aliases/Styles.md
deleted file mode 100644
index 1e10feb3ea..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/type-aliases/Styles.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# Styles
-
-> **Styles** = `object`
-
-Defined in: [parser/types.ts:168](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L168)
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `background?` | `string` | Background | [parser/types.ts:193](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L193) |
-| `backgroundColor?` | `string` | - | [parser/types.ts:194](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L194) |
-| `backgroundImage?` | `string` | - | [parser/types.ts:195](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L195) |
-| `backgroundPosition?` | `string` | - | [parser/types.ts:196](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L196) |
-| `backgroundSize?` | `string` | - | [parser/types.ts:197](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L197) |
-| `border?` | `string` | Border | [parser/types.ts:189](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L189) |
-| `borderRadius?` | `string` | - | [parser/types.ts:190](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L190) |
-| `bottom?` | `string` | - | [parser/types.ts:180](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L180) |
-| `color?` | `string` | Typography | [parser/types.ts:203](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L203) |
-| `filter?` | `string` | Filter | [parser/types.ts:200](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L200) |
-| `font?` | `string` | - | [parser/types.ts:204](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L204) |
-| `fontFamily?` | `string` | - | [parser/types.ts:205](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L205) |
-| `fontSize?` | `string` | - | [parser/types.ts:206](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L206) |
-| `fontStyle?` | `"normal"` \| `"italic"` \| `"oblique"` | - | [parser/types.ts:207](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L207) |
-| `fontWeight?` | `string` \| `number` | - | [parser/types.ts:208](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L208) |
-| `height?` | `string` | Sizing | [parser/types.ts:170](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L170) |
-| `left?` | `string` | - | [parser/types.ts:181](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L181) |
-| `letterSpacing?` | `string` | - | [parser/types.ts:212](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L212) |
-| `lineHeight?` | `string` \| `number` | - | [parser/types.ts:214](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L214) |
-| `margin?` | `string` | Spacing | [parser/types.ts:185](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L185) |
-| `maxHeight?` | `string` | - | [parser/types.ts:174](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L174) |
-| `maxWidth?` | `string` | - | [parser/types.ts:175](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L175) |
-| `minHeight?` | `string` | - | [parser/types.ts:172](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L172) |
-| `minWidth?` | `string` | - | [parser/types.ts:173](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L173) |
-| `padding?` | `string` | - | [parser/types.ts:186](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L186) |
-| `position?` | `"static"` \| `"relative"` \| `"absolute"` \| `"fixed"` \| `"sticky"` | Positioning | [parser/types.ts:178](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L178) |
-| `right?` | `string` | - | [parser/types.ts:182](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L182) |
-| `textAlign?` | `"start"` \| `"center"` \| `"end"` \| `"justify"` \| `"left"` \| `"right"` \| `"match-parent"` | - | [parser/types.ts:209](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L209) |
-| `textDecoration?` | `"none"` \| `"underline"` \| `"overline"` \| `"line-through"` \| `"underline-overline"` | - | [parser/types.ts:210](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L210) |
-| `textTransform?` | `"capitalize"` \| `"lowercase"` \| `"none"` \| `"uppercase"` | - | [parser/types.ts:211](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L211) |
-| `top?` | `string` | - | [parser/types.ts:179](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L179) |
-| `transform?` | `string` | Transform | [parser/types.ts:217](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L217) |
-| `width?` | `string` | - | [parser/types.ts:171](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L171) |
-| `wordSpacing?` | `string` | - | [parser/types.ts:213](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L213) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/type-aliases/UserBrowser.md b/versioned_docs/version-v2.4.1/typedoc/type-aliases/UserBrowser.md
deleted file mode 100644
index ffb9918550..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/type-aliases/UserBrowser.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# UserBrowser
-
-> **UserBrowser** = `object`
-
-Defined in: [parser/types.ts:70](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L70)
-
-UserBrowser is used to define a minimum browser requirement for the study to run.
-
-## Properties
-
-| Property | Type | Description | Defined in |
-| ------ | ------ | ------ | ------ |
-| `minVersion?` | `number` | Minimum version of the browser to support. | [parser/types.ts:74](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L74) |
-| `name` | `string` | Name of the browser. e.g. chrome, firefox, safari. | [parser/types.ts:72](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L72) |
diff --git a/versioned_docs/version-v2.4.1/typedoc/type-aliases/UserDevice.md b/versioned_docs/version-v2.4.1/typedoc/type-aliases/UserDevice.md
deleted file mode 100644
index c2336936a2..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/type-aliases/UserDevice.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# UserDevice
-
-> **UserDevice** = `"desktop"` \| `"tablet"` \| `"mobile"`
-
-Defined in: [parser/types.ts:85](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L85)
diff --git a/versioned_docs/version-v2.4.1/typedoc/type-aliases/UserInput.md b/versioned_docs/version-v2.4.1/typedoc/type-aliases/UserInput.md
deleted file mode 100644
index e99ef8c2fb..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/type-aliases/UserInput.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# UserInput
-
-> **UserInput** = `"mouse"` \| `"touch"`
-
-Defined in: [parser/types.ts:95](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L95)
diff --git a/versioned_docs/version-v2.4.1/typedoc/type-aliases/VegaComponent.md b/versioned_docs/version-v2.4.1/typedoc/type-aliases/VegaComponent.md
deleted file mode 100644
index 85a5fc9939..0000000000
--- a/versioned_docs/version-v2.4.1/typedoc/type-aliases/VegaComponent.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# VegaComponent
-
-> **VegaComponent** = [`VegaComponentPath`](../interfaces/VegaComponentPath.md) \| [`VegaComponentConfig`](../interfaces/VegaComponentConfig.md)
-
-Defined in: [parser/types.ts:1264](https://github.com/revisit-studies/study/blob/0246def09f8a8d3a9193428f2d57948507c787cd/src/parser/types.ts#L1264)
diff --git a/versioned_sidebars/version-v2.4.1-sidebars.json b/versioned_sidebars/version-v2.4.1-sidebars.json
deleted file mode 100644
index 575afd20af..0000000000
--- a/versioned_sidebars/version-v2.4.1-sidebars.json
+++ /dev/null
@@ -1,221 +0,0 @@
-{
- "docs": [
- "introduction",
- {
- "type": "category",
- "label": "Getting Started",
- "link": {
- "type": "doc",
- "id": "getting-started/index"
- },
- "collapsed": false,
- "items": [
- "getting-started/how-does-it-work",
- "getting-started/installation",
- "getting-started/your-first-study",
- "getting-started/collecting-data"
- ]
- },
- {
- "type": "category",
- "label": "Designing Studies",
- "link": {
- "type": "doc",
- "id": "designing-studies/index"
- },
- "collapsed": false,
- "items": [
- "designing-studies/forms",
- "designing-studies/image-video-stimulus",
- "designing-studies/html-stimulus",
- "designing-studies/react-stimulus",
- "designing-studies/vega-stimulus",
- "designing-studies/answers-trainings",
- {
- "type": "category",
- "label": "Sequences",
- "items": [
- "designing-studies/sequences/study-sequences",
- "designing-studies/sequences/dynamic-blocks",
- "designing-studies/sequences/url-conditions"
- ]
- },
- "designing-studies/provenance-tracking",
- "designing-studies/think-aloud",
- "designing-studies/record-screen",
- "designing-studies/applying-style",
- "designing-studies/device-restrictions",
- "designing-studies/plugin-libraries",
- "designing-studies/parser-errors"
- ]
- },
- {
- "type": "category",
- "label": "Data And Deployment",
- "collapsed": false,
- "link": {
- "type": "doc",
- "id": "data-and-deployment/index"
- },
- "items": [
- "data-and-deployment/connecting-to-cloud-database",
- {
- "type": "category",
- "label": "Firebase",
- "items": [
- "data-and-deployment/firebase/setup",
- "data-and-deployment/firebase/enabling-authentication",
- "data-and-deployment/firebase/data-recovery"
- ]
- },
- {
- "type": "category",
- "label": "Supabase",
- "items": [
- "data-and-deployment/supabase/setup",
- "data-and-deployment/supabase/enabling-authentication"
- ]
- },
- "data-and-deployment/deploying-to-static-website",
- "data-and-deployment/deploying-with-docker",
- "data-and-deployment/connecting-to-external-platform",
- "data-and-deployment/user-management",
- "data-and-deployment/lifecycle-of-revisit"
- ]
- },
- {
- "type": "category",
- "label": "Analysis",
- "collapsed": false,
- "link": {
- "type": "doc",
- "id": "analysis/index"
- },
- "items": [
- "analysis/study-card",
- "analysis/study-summary",
- {
- "type": "category",
- "label": "Participant View",
- "link": {
- "type": "doc",
- "id": "analysis/participant-view"
- },
- "items": [
- "analysis/data-export",
- "analysis/participant-replay"
- ]
- },
- "analysis/trial-stats",
- "analysis/coding",
- "analysis/live-monitor",
- "analysis/config",
- {
- "type": "category",
- "label": "Management",
- "items": [
- "analysis/revisit-modes",
- "analysis/stage-management",
- "analysis/data-management"
- ]
- }
- ]
- },
- {
- "type": "category",
- "label": "ReVISitPy",
- "link": {
- "type": "doc",
- "id": "revisitpy/index"
- },
- "collapsed": true,
- "items": [
- "revisitpy/overview",
- "revisitpy/installation",
- {
- "type": "category",
- "label": "Examples",
- "link": {
- "type": "doc",
- "id": "revisitpy/examples/index"
- },
- "items": [
- "revisitpy/examples/example_simple_html",
- "revisitpy/examples/example_expanding_html_study",
- "revisitpy/examples/example_jnd_study"
- ]
- }
- ]
- },
- "faq"
- ],
- "reference": [
- {
- "type": "category",
- "label": "TypeDoc",
- "collapsed": false,
- "link": {
- "type": "doc",
- "id": "typedoc/index"
- },
- "items": [
- {
- "type": "category",
- "label": "Interfaces",
- "collapsed": false,
- "link": {
- "type": "generated-index"
- },
- "items": [
- {
- "type": "autogenerated",
- "dirName": "typedoc/interfaces"
- }
- ]
- },
- {
- "type": "category",
- "label": "Type Aliases",
- "collapsed": false,
- "link": {
- "type": "generated-index"
- },
- "items": [
- {
- "type": "autogenerated",
- "dirName": "typedoc/type-aliases"
- }
- ]
- }
- ]
- },
- {
- "type": "category",
- "label": "Libraries",
- "collapsed": false,
- "link": {
- "type": "generated-index"
- },
- "items": [
- {
- "type": "autogenerated",
- "dirName": "libraries"
- }
- ]
- },
- {
- "type": "category",
- "label": "ReVISitPY Reference",
- "collapsed": false,
- "link": {
- "type": "generated-index"
- },
- "items": [
- {
- "type": "autogenerated",
- "dirName": "revisitpy-reference"
- }
- ]
- }
- ]
-}
diff --git a/versions.json b/versions.json
index bf506f6fa0..03b2851a2f 100644
--- a/versions.json
+++ b/versions.json
@@ -1,5 +1,4 @@
[
- "v2.4.1",
"v2.3.2",
"v2.2.0",
"v2.1.1",
diff --git a/yarn.lock b/yarn.lock
index 162601f409..4687ae1925 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -197,6 +197,15 @@
js-tokens "^4.0.0"
picocolors "^1.1.1"
+"@babel/code-frame@^7.29.7":
+ version "7.29.7"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.7.tgz#f2fbbfea87c44a21590ec515b778b2c26d8866e7"
+ integrity sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.29.7"
+ js-tokens "^4.0.0"
+ picocolors "^1.1.1"
+
"@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.0":
version "7.28.4"
resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz"
@@ -234,6 +243,17 @@
"@jridgewell/trace-mapping" "^0.3.28"
jsesc "^3.0.2"
+"@babel/generator@^7.29.7":
+ version "7.29.7"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.7.tgz#cca0b8827e6bcf3ba176788e7f3b180ad6db2fa3"
+ integrity sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==
+ dependencies:
+ "@babel/parser" "^7.29.7"
+ "@babel/types" "^7.29.7"
+ "@jridgewell/gen-mapping" "^0.3.12"
+ "@jridgewell/trace-mapping" "^0.3.28"
+ jsesc "^3.0.2"
+
"@babel/helper-annotate-as-pure@^7.27.1", "@babel/helper-annotate-as-pure@^7.27.3":
version "7.27.3"
resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz"
@@ -290,6 +310,11 @@
resolved "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz"
integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==
+"@babel/helper-globals@^7.29.7":
+ version "7.29.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.29.7.tgz#f04a96fbd8473241b1079243f5b3f03a3010ab7b"
+ integrity sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==
+
"@babel/helper-member-expression-to-functions@^7.27.1":
version "7.27.1"
resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz"
@@ -306,6 +331,14 @@
"@babel/traverse" "^7.27.1"
"@babel/types" "^7.27.1"
+"@babel/helper-module-imports@^7.29.7":
+ version "7.29.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz#ef25048a518e828d7393fac5882ddd73921d7396"
+ integrity sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==
+ dependencies:
+ "@babel/traverse" "^7.29.7"
+ "@babel/types" "^7.29.7"
+
"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.3":
version "7.28.3"
resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz"
@@ -315,6 +348,15 @@
"@babel/helper-validator-identifier" "^7.27.1"
"@babel/traverse" "^7.28.3"
+"@babel/helper-module-transforms@^7.29.7":
+ version "7.29.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz#b062747a5997ba138637201328bbff77960574ae"
+ integrity sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==
+ dependencies:
+ "@babel/helper-module-imports" "^7.29.7"
+ "@babel/helper-validator-identifier" "^7.29.7"
+ "@babel/traverse" "^7.29.7"
+
"@babel/helper-optimise-call-expression@^7.27.1":
version "7.27.1"
resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz"
@@ -327,6 +369,11 @@
resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz"
integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==
+"@babel/helper-plugin-utils@^7.29.7":
+ version "7.29.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz#c0a0766f1a13617d8a17407d7ab8f9d486225ea4"
+ integrity sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==
+
"@babel/helper-remap-async-to-generator@^7.27.1":
version "7.27.1"
resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz"
@@ -358,11 +405,21 @@
resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz"
integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==
+"@babel/helper-string-parser@^7.29.7":
+ version "7.29.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz#7f0871d99824d23137d60f86fcf6130fd5a1b51f"
+ integrity sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==
+
"@babel/helper-validator-identifier@^7.27.1":
version "7.27.1"
resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz"
integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==
+"@babel/helper-validator-identifier@^7.29.7":
+ version "7.29.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz#bd87084ced0c796ec46bda492de6e83d29e89fc2"
+ integrity sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==
+
"@babel/helper-validator-option@^7.27.1":
version "7.27.1"
resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz"
@@ -392,6 +449,13 @@
dependencies:
"@babel/types" "^7.28.4"
+"@babel/parser@^7.29.7":
+ version "7.29.7"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.7.tgz#837b87387cbf5ec5530cb634b3c622f68edb9334"
+ integrity sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==
+ dependencies:
+ "@babel/types" "^7.29.7"
+
"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.27.1":
version "7.27.1"
resolved "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz"
@@ -676,14 +740,14 @@
"@babel/helper-plugin-utils" "^7.27.1"
"@babel/plugin-transform-modules-systemjs@^7.27.1":
- version "7.27.1"
- resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz"
- integrity sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==
+ version "7.29.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.7.tgz#e575dd2ab9882906de120ff7dc9dee9914d8b6f3"
+ integrity sha512-TM2ZcQLoG2/y4HODiStCo10DibYhWhGWAwVv+EQKmG/7GFl0N+AAmUiXOMKM+aiJ9XBJ9AHVZBvTzMnJ2sM3cQ==
dependencies:
- "@babel/helper-module-transforms" "^7.27.1"
- "@babel/helper-plugin-utils" "^7.27.1"
- "@babel/helper-validator-identifier" "^7.27.1"
- "@babel/traverse" "^7.27.1"
+ "@babel/helper-module-transforms" "^7.29.7"
+ "@babel/helper-plugin-utils" "^7.29.7"
+ "@babel/helper-validator-identifier" "^7.29.7"
+ "@babel/traverse" "^7.29.7"
"@babel/plugin-transform-modules-umd@^7.27.1":
version "7.27.1"
@@ -1068,6 +1132,15 @@
"@babel/parser" "^7.27.2"
"@babel/types" "^7.27.1"
+"@babel/template@^7.29.7":
+ version "7.29.7"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.29.7.tgz#4d9d4004f645cdd304de958c725162784ecac700"
+ integrity sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==
+ dependencies:
+ "@babel/code-frame" "^7.29.7"
+ "@babel/parser" "^7.29.7"
+ "@babel/types" "^7.29.7"
+
"@babel/traverse@^7.25.9", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4":
version "7.28.4"
resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz"
@@ -1081,6 +1154,19 @@
"@babel/types" "^7.28.4"
debug "^4.3.1"
+"@babel/traverse@^7.29.7":
+ version "7.29.7"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.7.tgz#c47b07a41b95da0907d026b5dd894d98de7d2f2d"
+ integrity sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==
+ dependencies:
+ "@babel/code-frame" "^7.29.7"
+ "@babel/generator" "^7.29.7"
+ "@babel/helper-globals" "^7.29.7"
+ "@babel/parser" "^7.29.7"
+ "@babel/template" "^7.29.7"
+ "@babel/types" "^7.29.7"
+ debug "^4.3.1"
+
"@babel/types@^7.21.3", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.4.4":
version "7.28.4"
resolved "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz"
@@ -1089,6 +1175,14 @@
"@babel/helper-string-parser" "^7.27.1"
"@babel/helper-validator-identifier" "^7.27.1"
+"@babel/types@^7.29.7":
+ version "7.29.7"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.7.tgz#8005e31d82712ee7adaef6e23c63b71a62770a92"
+ integrity sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==
+ dependencies:
+ "@babel/helper-string-parser" "^7.29.7"
+ "@babel/helper-validator-identifier" "^7.29.7"
+
"@colors/colors@1.5.0":
version "1.5.0"
resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz"
@@ -2244,6 +2338,11 @@
"@emnapi/runtime" "^1.5.0"
"@tybys/wasm-util" "^0.10.1"
+"@noble/hashes@1.4.0":
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426"
+ integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==
+
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
@@ -2270,6 +2369,136 @@
resolved "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz"
integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==
+"@peculiar/asn1-cms@^2.6.0", "@peculiar/asn1-cms@^2.7.0":
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/@peculiar/asn1-cms/-/asn1-cms-2.7.0.tgz#8e0eb656f4fc85f7c621dd442fa2d298faa84984"
+ integrity sha512-hew63shtzzvBcSHbhm+cyAmKe6AIfinT9hzEqSPjDC6opTTMKmTkQ0gHuN2KsWlvqiKw1S/fS94fhag/FJkioQ==
+ dependencies:
+ "@peculiar/asn1-schema" "^2.7.0"
+ "@peculiar/asn1-x509" "^2.7.0"
+ "@peculiar/asn1-x509-attr" "^2.7.0"
+ asn1js "^3.0.6"
+ tslib "^2.8.1"
+
+"@peculiar/asn1-csr@^2.6.0":
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/@peculiar/asn1-csr/-/asn1-csr-2.7.0.tgz#1a03ac03f7571ea981f5d8377c6f4510c5d43411"
+ integrity sha512-VVsAyGqErT9D1SY4aEqozThXMVI+ssVRiv2DDeYuvpBKLIgZ3hYs3Ay3u/VSoKq6ESFi9cf6rf3IOOzfwh7oMA==
+ dependencies:
+ "@peculiar/asn1-schema" "^2.7.0"
+ "@peculiar/asn1-x509" "^2.7.0"
+ asn1js "^3.0.6"
+ tslib "^2.8.1"
+
+"@peculiar/asn1-ecc@^2.6.0":
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/@peculiar/asn1-ecc/-/asn1-ecc-2.7.0.tgz#c35b57859812ecd0c2ae7b2144855e8208c2cfee"
+ integrity sha512-n7KEs/Q/wrB415cxy4fHOBhegp4NdJ15fkJPwcB/3/8iNBQC2L/N7SChJPKDJPZGYH0jD4Tg4/0vnHmwghnbKw==
+ dependencies:
+ "@peculiar/asn1-schema" "^2.7.0"
+ "@peculiar/asn1-x509" "^2.7.0"
+ asn1js "^3.0.6"
+ tslib "^2.8.1"
+
+"@peculiar/asn1-pfx@^2.7.0":
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/@peculiar/asn1-pfx/-/asn1-pfx-2.7.0.tgz#d00766b13ff49785684a604248e6aadd184b291f"
+ integrity sha512-V/nrlQVmhg7lYAsM7E13UDL5erAwFv6kCIVFqNaMIHSVi7dngcT839JkRTkQBqznMG98l2XjxYk74ZztAohZzA==
+ dependencies:
+ "@peculiar/asn1-cms" "^2.7.0"
+ "@peculiar/asn1-pkcs8" "^2.7.0"
+ "@peculiar/asn1-rsa" "^2.7.0"
+ "@peculiar/asn1-schema" "^2.7.0"
+ asn1js "^3.0.6"
+ tslib "^2.8.1"
+
+"@peculiar/asn1-pkcs8@^2.7.0":
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.7.0.tgz#5ee602d8a9a3e0a3f09f7b008ff644a657378692"
+ integrity sha512-9GTl1nE8Mx1kTZ+7QyYatDyKsm34QcWRBFkY1iPvWC3X4Dona5s/tlLiQsx5WzVdZqiMBZNYT0buyw4/vbhnjw==
+ dependencies:
+ "@peculiar/asn1-schema" "^2.7.0"
+ "@peculiar/asn1-x509" "^2.7.0"
+ asn1js "^3.0.6"
+ tslib "^2.8.1"
+
+"@peculiar/asn1-pkcs9@^2.6.0":
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.7.0.tgz#23b4eae41c2feb8df258aa69c502a70092026b0a"
+ integrity sha512-Bh7m+OuIaSEllPQcSd9OSp93F4ROWH7sbITWV8MI+8dwsjE5111/87VxiWVvYFKyww3vp39geLv9ENqhwWHcew==
+ dependencies:
+ "@peculiar/asn1-cms" "^2.7.0"
+ "@peculiar/asn1-pfx" "^2.7.0"
+ "@peculiar/asn1-pkcs8" "^2.7.0"
+ "@peculiar/asn1-schema" "^2.7.0"
+ "@peculiar/asn1-x509" "^2.7.0"
+ "@peculiar/asn1-x509-attr" "^2.7.0"
+ asn1js "^3.0.6"
+ tslib "^2.8.1"
+
+"@peculiar/asn1-rsa@^2.6.0", "@peculiar/asn1-rsa@^2.7.0":
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/@peculiar/asn1-rsa/-/asn1-rsa-2.7.0.tgz#6dc5c78c643264dd5a251a66f1dd9a38fcbba385"
+ integrity sha512-/qvENQrXyTZURjMqSeofHul0JJt2sNSzSwk36pl2olkHbaioMQgrASDZAlHXl0xUlnVbHj0uGgOrBMTb5x2aJQ==
+ dependencies:
+ "@peculiar/asn1-schema" "^2.7.0"
+ "@peculiar/asn1-x509" "^2.7.0"
+ asn1js "^3.0.6"
+ tslib "^2.8.1"
+
+"@peculiar/asn1-schema@^2.6.0", "@peculiar/asn1-schema@^2.7.0":
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.7.0.tgz#f2dcb25995ce7cac8687ba1039f043e5eff43820"
+ integrity sha512-W8ZfWzLmQnrcky+eh3tni4IozMdqBDiHWU0N+vve/UGjMaUs8c0L7A2oEdkBXS8rTpWDpK/aoI3DG/L/hxmxPg==
+ dependencies:
+ "@peculiar/utils" "^2.0.2"
+ asn1js "^3.0.6"
+ tslib "^2.8.1"
+
+"@peculiar/asn1-x509-attr@^2.7.0":
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.7.0.tgz#5ef2a10d3a78d4763b848a2cb56db4bb6b1e082a"
+ integrity sha512-NS8e7SOgXipkzUPLF/sce7ukpMpWjhxYsH0n6Y+bHYo4TTxOb95Zv7hqwSuL212mj5YxovjdOKQOgH1As3E94w==
+ dependencies:
+ "@peculiar/asn1-schema" "^2.7.0"
+ "@peculiar/asn1-x509" "^2.7.0"
+ asn1js "^3.0.6"
+ tslib "^2.8.1"
+
+"@peculiar/asn1-x509@^2.6.0", "@peculiar/asn1-x509@^2.7.0":
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509/-/asn1-x509-2.7.0.tgz#84793efb7819dbc9526fd6b0a4ccd86f90464b96"
+ integrity sha512-mUn9RRrkGDnG4ALfunDmzyRW5dg+sWCj/pfnCCqEHYbkGxEpvUt6iVJv8Yw1cyp6SWZ26ZE5oSmI5SqEaen15g==
+ dependencies:
+ "@peculiar/asn1-schema" "^2.7.0"
+ "@peculiar/utils" "^2.0.2"
+ asn1js "^3.0.6"
+ tslib "^2.8.1"
+
+"@peculiar/utils@^2.0.2":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@peculiar/utils/-/utils-2.0.3.tgz#a27ca4c4b73652e110f19a7d16d664f458a5528e"
+ integrity sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==
+ dependencies:
+ tslib "^2.8.1"
+
+"@peculiar/x509@^1.14.2":
+ version "1.14.3"
+ resolved "https://registry.yarnpkg.com/@peculiar/x509/-/x509-1.14.3.tgz#2c44c2b89474346afec38a0c2803ec4fb8ce959e"
+ integrity sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==
+ dependencies:
+ "@peculiar/asn1-cms" "^2.6.0"
+ "@peculiar/asn1-csr" "^2.6.0"
+ "@peculiar/asn1-ecc" "^2.6.0"
+ "@peculiar/asn1-pkcs9" "^2.6.0"
+ "@peculiar/asn1-rsa" "^2.6.0"
+ "@peculiar/asn1-schema" "^2.6.0"
+ "@peculiar/asn1-x509" "^2.6.0"
+ pvtsutils "^1.3.6"
+ reflect-metadata "^0.2.2"
+ tslib "^2.8.1"
+ tsyringe "^4.10.0"
+
"@pnpm/config.env-replace@^1.1.0":
version "1.1.0"
resolved "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz"
@@ -2768,7 +2997,7 @@
"@types/range-parser" "*"
"@types/send" "*"
-"@types/express@*", "@types/express@^4.17.21":
+"@types/express@*":
version "4.17.23"
resolved "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz"
integrity sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==
@@ -2778,6 +3007,16 @@
"@types/qs" "*"
"@types/serve-static" "*"
+"@types/express@^4.17.25":
+ version "4.17.25"
+ resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.25.tgz#070c8c73a6fee6936d65c195dbbfb7da5026649b"
+ integrity sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==
+ dependencies:
+ "@types/body-parser" "*"
+ "@types/express-serve-static-core" "^4.17.33"
+ "@types/qs" "*"
+ "@types/serve-static" "^1"
+
"@types/gtag.js@^0.0.12":
version "0.0.12"
resolved "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz"
@@ -2863,13 +3102,6 @@
resolved "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz"
integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==
-"@types/node-forge@^1.3.0":
- version "1.3.14"
- resolved "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz"
- integrity sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==
- dependencies:
- "@types/node" "*"
-
"@types/node@*":
version "24.8.1"
resolved "https://registry.npmjs.org/@types/node/-/node-24.8.1.tgz"
@@ -2973,6 +3205,15 @@
"@types/node" "*"
"@types/send" "<1"
+"@types/serve-static@^1":
+ version "1.15.10"
+ resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.10.tgz#768169145a778f8f5dfcb6360aead414a3994fee"
+ integrity sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==
+ dependencies:
+ "@types/http-errors" "*"
+ "@types/node" "*"
+ "@types/send" "<1"
+
"@types/sockjs@^0.3.36":
version "0.3.36"
resolved "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz"
@@ -3345,6 +3586,15 @@ array-union@^2.1.0:
resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz"
integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+asn1js@^3.0.6:
+ version "3.0.10"
+ resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.10.tgz#df26c874c8a8b41ca605efea47b2ad07551013dd"
+ integrity sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==
+ dependencies:
+ pvtsutils "^1.3.6"
+ pvutils "^1.1.5"
+ tslib "^2.8.1"
+
astring@^1.8.0:
version "1.9.0"
resolved "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz"
@@ -3438,10 +3688,10 @@ binary-extensions@^2.0.0:
resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz"
integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
-body-parser@~1.20.3:
- version "1.20.4"
- resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.4.tgz#f8e20f4d06ca8a50a71ed329c15dccad1cdc547f"
- integrity sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==
+body-parser@~1.20.5:
+ version "1.20.5"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.5.tgz#303c8c34423d1d6fa799bc764e93c1e4dc6ebf64"
+ integrity sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==
dependencies:
bytes "~3.1.2"
content-type "~1.0.5"
@@ -3451,7 +3701,7 @@ body-parser@~1.20.3:
http-errors "~2.0.1"
iconv-lite "~0.4.24"
on-finished "~2.4.1"
- qs "~6.14.0"
+ qs "~6.15.1"
raw-body "~2.5.3"
type-is "~1.6.18"
unpipe "~1.0.0"
@@ -3552,6 +3802,11 @@ bytes@3.1.2, bytes@~3.1.2:
resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz"
integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
+bytestreamjs@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/bytestreamjs/-/bytestreamjs-2.0.1.tgz#a32947c7ce389a6fa11a09a9a563d0a45889535e"
+ integrity sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==
+
cacheable-lookup@^7.0.0:
version "7.0.0"
resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz"
@@ -3841,9 +4096,9 @@ compressible@~2.0.18:
dependencies:
mime-db ">= 1.43.0 < 2"
-compression@^1.7.4:
+compression@^1.8.1:
version "1.8.1"
- resolved "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.1.tgz#4a45d909ac16509195a9a28bd91094889c180d79"
integrity sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==
dependencies:
bytes "3.1.2"
@@ -4689,14 +4944,14 @@ execa@5.1.1:
signal-exit "^3.0.3"
strip-final-newline "^2.0.0"
-express@^4.21.2:
- version "4.22.1"
- resolved "https://registry.yarnpkg.com/express/-/express-4.22.1.tgz#1de23a09745a4fffdb39247b344bb5eaff382069"
- integrity sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==
+express@^4.22.1:
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.22.2.tgz#c17ae0981e5efc24b22272f0e041c4662503b700"
+ integrity sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==
dependencies:
accepts "~1.3.8"
array-flatten "1.1.1"
- body-parser "~1.20.3"
+ body-parser "~1.20.5"
content-disposition "~0.5.4"
content-type "~1.0.4"
cookie "~0.7.1"
@@ -4715,7 +4970,7 @@ express@^4.21.2:
parseurl "~1.3.3"
path-to-regexp "~0.1.12"
proxy-addr "~2.0.7"
- qs "~6.14.0"
+ qs "~6.15.1"
range-parser "~1.2.1"
safe-buffer "5.2.1"
send "~0.19.0"
@@ -4760,9 +5015,9 @@ fast-json-stable-stringify@^2.0.0:
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
fast-uri@^3.0.1:
- version "3.1.0"
- resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz"
- integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.2.tgz#8af3d4fc9d3e71b11572cc2673b514a7d1a8c8ec"
+ integrity sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==
fastq@^1.6.0:
version "1.19.1"
@@ -6910,11 +7165,6 @@ node-emoji@^2.1.0:
emojilib "^2.4.0"
skin-tone "^2.0.0"
-node-forge@^1:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.4.0.tgz#1c7b7d8bdc2d078739f58287d589d903a11b2fc2"
- integrity sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==
-
node-releases@^2.0.27:
version "2.0.27"
resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz"
@@ -7245,6 +7495,18 @@ pkg-dir@^7.0.0:
dependencies:
find-up "^6.3.0"
+pkijs@^3.3.3:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/pkijs/-/pkijs-3.4.0.tgz#d9164def30ff6d97be2d88966d5e36192499ca9c"
+ integrity sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==
+ dependencies:
+ "@noble/hashes" "1.4.0"
+ asn1js "^3.0.6"
+ bytestreamjs "^2.0.1"
+ pvtsutils "^1.3.6"
+ pvutils "^1.1.3"
+ tslib "^2.8.1"
+
postcss-attribute-case-insensitive@^7.0.1:
version "7.0.1"
resolved "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz"
@@ -7888,10 +8150,22 @@ pupa@^3.1.0:
dependencies:
escape-goat "^4.0.0"
-qs@~6.14.0:
- version "6.14.2"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.2.tgz#b5634cf9d9ad9898e31fba3504e866e8efb6798c"
- integrity sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==
+pvtsutils@^1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.6.tgz#ec46e34db7422b9e4fdc5490578c1883657d6001"
+ integrity sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==
+ dependencies:
+ tslib "^2.8.1"
+
+pvutils@^1.1.3, pvutils@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.5.tgz#84b0dea4a5d670249aa9800511804ee0b7c2809c"
+ integrity sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==
+
+qs@~6.15.1:
+ version "6.15.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.2.tgz#fd55426d710403ddccc45e0f9eab16db7727ece9"
+ integrity sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==
dependencies:
side-channel "^1.1.0"
@@ -8098,6 +8372,11 @@ recma-stringify@^1.0.0:
unified "^11.0.0"
vfile "^6.0.0"
+reflect-metadata@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b"
+ integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==
+
regenerate-unicode-properties@^10.2.2:
version "10.2.2"
resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz"
@@ -8413,13 +8692,13 @@ select-hose@^2.0.0:
resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz"
integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==
-selfsigned@^2.4.1:
- version "2.4.1"
- resolved "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz"
- integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==
+selfsigned@^5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-5.5.0.tgz#4c9ab7c7c9f35f18fb6a9882c253eb0e6bd6557b"
+ integrity sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==
dependencies:
- "@types/node-forge" "^1.3.0"
- node-forge "^1"
+ "@peculiar/x509" "^1.14.2"
+ pkijs "^3.3.3"
semver-diff@^4.0.0:
version "4.0.0"
@@ -8990,11 +9269,23 @@ trough@^2.0.0:
resolved "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz"
integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==
-tslib@^2.0.0, tslib@^2.0.3, tslib@^2.4.0, tslib@^2.6.0:
+tslib@^1.9.3:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+ integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tslib@^2.0.0, tslib@^2.0.3, tslib@^2.4.0, tslib@^2.6.0, tslib@^2.8.1:
version "2.8.1"
resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz"
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
+tsyringe@^4.10.0:
+ version "4.10.0"
+ resolved "https://registry.yarnpkg.com/tsyringe/-/tsyringe-4.10.0.tgz#d0c95815d584464214060285eaaadd94aa03299c"
+ integrity sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==
+ dependencies:
+ tslib "^1.9.3"
+
type-fest@^0.21.3:
version "0.21.3"
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz"
@@ -9302,13 +9593,13 @@ webpack-dev-middleware@^7.4.2:
schema-utils "^4.0.0"
webpack-dev-server@^5.2.2:
- version "5.2.2"
- resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz"
- integrity sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==
+ version "5.2.4"
+ resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.2.4.tgz#6e6306ce59848ed322c235e48b326632b1eed6d6"
+ integrity sha512-GqDPGZN9bRqKBTkp4aWkobDDHMsrXKoGSdOH56smIri8qR0JG8gfL8/v/f/OZR3/OKXjG8uwJbFVhKm/FNU/UA==
dependencies:
"@types/bonjour" "^3.5.13"
"@types/connect-history-api-fallback" "^1.5.4"
- "@types/express" "^4.17.21"
+ "@types/express" "^4.17.25"
"@types/express-serve-static-core" "^4.17.21"
"@types/serve-index" "^1.9.4"
"@types/serve-static" "^1.15.5"
@@ -9318,9 +9609,9 @@ webpack-dev-server@^5.2.2:
bonjour-service "^1.2.1"
chokidar "^3.6.0"
colorette "^2.0.10"
- compression "^1.7.4"
+ compression "^1.8.1"
connect-history-api-fallback "^2.0.0"
- express "^4.21.2"
+ express "^4.22.1"
graceful-fs "^4.2.6"
http-proxy-middleware "^2.0.9"
ipaddr.js "^2.1.0"
@@ -9328,7 +9619,7 @@ webpack-dev-server@^5.2.2:
open "^10.0.3"
p-retry "^6.2.0"
schema-utils "^4.2.0"
- selfsigned "^2.4.1"
+ selfsigned "^5.5.0"
serve-index "^1.9.1"
sockjs "^0.3.24"
spdy "^4.0.2"